From 3eccf6963dd33000a1ef3b1220755fd564a53123 Mon Sep 17 00:00:00 2001 From: Max Hoffman Date: Wed, 19 Mar 2025 12:14:17 -0700 Subject: [PATCH 1/2] [memo] hash join right-side cardinality can be filtered --- enginetest/join_stats_tests.go | 6 +- enginetest/queries/imdb_plans.go | 46544 +++++++++++----------- enginetest/queries/integration_plans.go | 12 +- sql/memo/coster.go | 2 +- 4 files changed, 22672 insertions(+), 23892 deletions(-) diff --git a/enginetest/join_stats_tests.go b/enginetest/join_stats_tests.go index 32e43eb7cd..4f1c8cda0e 100644 --- a/enginetest/join_stats_tests.go +++ b/enginetest/join_stats_tests.go @@ -135,12 +135,8 @@ var JoinStatTests = []struct { { // b is smallest table, bxc is smallest b-connected join // due to b < 0 filter and positive c skew - q: "select /*+ LEFT_DEEP */ count(*) from u0 b join `u-15` a on a.b = b.b join `u+15` c on a.b = c.b where b.b < -2", - order: [][]string{{"b", "c", "a"}}, - }, - { q: "select /*+ LEFT_DEEP */ count(*) from u0 b join `u-15` a on a.b = b.b join `u+15` c on a.b = c.b where b.b < -2", - order: [][]string{{"b", "c", "a"}}, + order: [][]string{{"b", "c", "a"}, {"a", "c", "b"}}, }, { // b is smallest table, bxa is smallest b-connected join diff --git a/enginetest/queries/imdb_plans.go b/enginetest/queries/imdb_plans.go index 9d54177492..f1a7786fe2 100644 --- a/enginetest/queries/imdb_plans.go +++ b/enginetest/queries/imdb_plans.go @@ -50,54 +50,23 @@ WHERE ci.note LIKE '%(voice)%' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ ci.movie_id:11!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2005 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:8!null\n" + - " │ │ └─ mc.company_type_id:5!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:6!null\n" + - " │ │ │ └─ mc.company_id:4!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ └─ [ru] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ rt.id:9!null\n" + + " │ ├─ rt.id:3!null\n" + " │ └─ ci.role_id:14!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -109,23 +78,56 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id role]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ chn.id:15!null\n" + - " │ └─ ci.person_role_id:12\n" + - " ├─ Filter\n" + + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ ci.note LIKE '%(voice)%'\n" + - " │ │ └─ ci.note LIKE '%(uncredited)%'\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ └─ mc.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:9!null\n" + + " │ │ └─ mc.company_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:8!null\n" + + " │ └─ mc.company_type_id:7!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [ru] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ chn.id:15!null\n" + + " │ └─ ci.person_role_id:12\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ ci.note LIKE '%(voice)%'\n" + + " │ │ └─ ci.note LIKE '%(uncredited)%'\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as uncredited_voiced_character, min(t.title) as russian_movie]\n" + @@ -133,33 +135,13 @@ WHERE ci.note LIKE '%(voice)%' " ├─ SelectedExprs(MIN(chn.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mc.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[ru]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (rt.id = ci.role_id)\n" + " ├─ Filter\n" + @@ -169,17 +151,35 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id role]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ Filter\n" + - " │ ├─ (ci.note LIKE '%(voice)%' AND ci.note LIKE '%(uncredited)%')\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " ├─ (((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[ru]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (chn.id = ci.person_role_id)\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note LIKE '%(voice)%' AND ci.note LIKE '%(uncredited)%')\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as uncredited_voiced_character, min(t.title) as russian_movie]\n" + @@ -187,33 +187,13 @@ WHERE ci.note LIKE '%(voice)%' " ├─ SelectedExprs(MIN(chn.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mc.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[ru]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (rt.id = ci.role_id)\n" + " ├─ Filter\n" + @@ -223,17 +203,35 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id role]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ Filter\n" + - " │ ├─ (ci.note LIKE '%(voice)%' AND ci.note LIKE '%(uncredited)%')\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " ├─ (((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[ru]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (chn.id = ci.person_role_id)\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note LIKE '%(voice)%' AND ci.note LIKE '%(uncredited)%')\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", }, { @@ -267,54 +265,23 @@ WHERE ci.note LIKE '%(voice)%' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ ci.movie_id:11!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:8!null\n" + - " │ │ └─ mc.company_type_id:5!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:6!null\n" + - " │ │ │ └─ mc.company_id:4!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ └─ [ru] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ rt.id:9!null\n" + + " │ ├─ rt.id:3!null\n" + " │ └─ ci.role_id:14!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -326,21 +293,54 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id role]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ chn.id:15!null\n" + - " │ └─ ci.person_role_id:12\n" + - " ├─ Filter\n" + - " │ ├─ ci.note LIKE '%(producer)%'\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ └─ mc.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:9!null\n" + + " │ │ └─ mc.company_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:8!null\n" + + " │ └─ mc.company_type_id:7!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [ru] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ chn.id:15!null\n" + + " │ └─ ci.person_role_id:12\n" + + " ├─ Filter\n" + + " │ ├─ ci.note LIKE '%(producer)%'\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as character, min(t.title) as russian_mov_with_actor_producer]\n" + @@ -348,33 +348,13 @@ WHERE ci.note LIKE '%(voice)%' " ├─ SelectedExprs(MIN(chn.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mc.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[ru]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (rt.id = ci.role_id)\n" + " ├─ Filter\n" + @@ -384,17 +364,35 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id role]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ Filter\n" + - " │ ├─ ci.note LIKE '%(producer)%'\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " ├─ (((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[ru]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (chn.id = ci.person_role_id)\n" + + " ├─ Filter\n" + + " │ ├─ ci.note LIKE '%(producer)%'\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as character, min(t.title) as russian_mov_with_actor_producer]\n" + @@ -402,33 +400,13 @@ WHERE ci.note LIKE '%(voice)%' " ├─ SelectedExprs(MIN(chn.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mc.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[ru]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (rt.id = ci.role_id)\n" + " ├─ Filter\n" + @@ -438,17 +416,35 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id role]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ Filter\n" + - " │ ├─ ci.note LIKE '%(producer)%'\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " ├─ (((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[ru]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (chn.id = ci.person_role_id)\n" + + " ├─ Filter\n" + + " │ ├─ ci.note LIKE '%(producer)%'\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", }, { @@ -481,54 +477,23 @@ WHERE ci.note LIKE '%(voice)%' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:4!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ ci.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 1990 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:8!null\n" + - " │ │ └─ mc.company_type_id:5!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:6!null\n" + - " │ │ │ └─ mc.company_id:4!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ └─ [us] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1990 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ rt.id:9!null\n" + + " │ ├─ rt.id:3!null\n" + " │ └─ ci.role_id:13!null\n" + " ├─ TableAlias(rt)\n" + " │ └─ ProcessTable\n" + @@ -536,21 +501,54 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ chn.id:14!null\n" + - " │ └─ ci.person_role_id:11\n" + - " ├─ Filter\n" + - " │ ├─ ci.note LIKE '%(producer)%'\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:10!null\n" + + " │ │ │ └─ mc.movie_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:8!null\n" + + " │ │ └─ mc.company_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:7!null\n" + + " │ └─ mc.company_type_id:6!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ chn.id:14!null\n" + + " │ └─ ci.person_role_id:11\n" + + " ├─ Filter\n" + + " │ ├─ ci.note LIKE '%(producer)%'\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as character, min(t.title) as movie_with_american_producer]\n" + @@ -558,33 +556,13 @@ WHERE ci.note LIKE '%(voice)%' " ├─ SelectedExprs(MIN(chn.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mc.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 1990)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (rt.id = ci.role_id)\n" + " ├─ TableAlias(rt)\n" + @@ -592,17 +570,35 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ Filter\n" + - " │ ├─ ci.note LIKE '%(producer)%'\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " ├─ (((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (chn.id = ci.person_role_id)\n" + + " ├─ Filter\n" + + " │ ├─ ci.note LIKE '%(producer)%'\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as character, min(t.title) as movie_with_american_producer]\n" + @@ -610,33 +606,13 @@ WHERE ci.note LIKE '%(voice)%' " ├─ SelectedExprs(MIN(chn.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mc.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 1990)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (rt.id = ci.role_id)\n" + " ├─ TableAlias(rt)\n" + @@ -644,17 +620,35 @@ WHERE ci.note LIKE '%(voice)%' " │ ├─ name: role_type\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ Filter\n" + - " │ ├─ ci.note LIKE '%(producer)%'\n" + - " │ └─ TableAlias(ci)\n" + - " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [movie_id person_role_id note role_id]\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " ├─ (((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (chn.id = ci.person_role_id)\n" + + " ├─ Filter\n" + + " │ ├─ ci.note LIKE '%(producer)%'\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [movie_id person_role_id note role_id]\n" + + " └─ TableAlias(chn)\n" + + " └─ Table\n" + + " ├─ name: char_name\n" + + " └─ columns: [id name]\n" + "", }, { @@ -693,265 +687,242 @@ WHERE cn.country_code !='[pl]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->from_company:0, min(lt.link):1!null->movie_link_type:0, min(t.title):2!null->non_polish_sequel_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(lt.link:5!null), MIN(t.title:18!null)\n" + + " ├─ select: MIN(cn.name:18!null), MIN(lt.link:12!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:2!null\n" + - " │ │ │ └─ t.id:17!null\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:17!null\n" + - " │ │ └─ mk.movie_id:15!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:17!null\n" + - " │ └─ mc.movie_id:6!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:16!null\n" + - " │ │ └─ k.id:0!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ sequel (longtext)\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:14!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:2!null\n" + - " │ │ └─ mk.movie_id:15!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:2!null\n" + - " │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ lt.id:4!null\n" + - " │ │ │ │ └─ ml.link_type_id:3!null\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id link]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_type_id:8!null\n" + - " │ │ │ └─ ct.id:13!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.company_id:7!null\n" + - " │ │ │ │ └─ cn.id:10!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mc.note:3 IS NULL\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ │ └─ Or\n" + - " │ │ │ │ ├─ cn.name LIKE '%Film%'\n" + - " │ │ │ │ └─ cn.name LIKE '%Warner%'\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ └─ production companies (longtext)\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:6!null]\n" + - " │ ├─ colSet: (20-22)\n" + - " │ ├─ tableId: 6\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ml.movie_id:2!null, mk.movie_id:15!null, mc.movie_id:6!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 1950 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2000 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + - "", - ExpectedEstimates: "Project\n" + - " ├─ columns: [min(cn.name) as from_company, min(lt.link) as movie_link_type, min(t.title) as non_polish_sequel_movie]\n" + - " └─ GroupBy\n" + - " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + - " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id link]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (mc.company_type_id = ct.id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + - "", - ExpectedAnalysis: "Project\n" + - " ├─ columns: [min(cn.name) as from_company, min(lt.link) as movie_link_type, min(t.title) as non_polish_sequel_movie]\n" + - " └─ GroupBy\n" + - " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + - " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id link]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (mc.company_type_id = ct.id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 1950 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ lt.id:11!null\n" + + " │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ └─ k.id:13!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_type_id:9!null\n" + + " │ │ └─ ct.id:15!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:8!null\n" + + " │ └─ cn.id:17!null\n" + + " ├─ Filter\n" + + " │ ├─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ sequel (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [pl] (longtext)\n" + + " │ └─ Or\n" + + " │ ├─ cn.name LIKE '%Film%'\n" + + " │ └─ cn.name LIKE '%Warner%'\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + + "", + ExpectedEstimates: "Project\n" + + " ├─ columns: [min(cn.name) as from_company, min(lt.link) as movie_link_type, min(t.title) as non_polish_sequel_movie]\n" + + " └─ GroupBy\n" + + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + + " ├─ Grouping()\n" + + " └─ InnerJoin\n" + + " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + + "", + ExpectedAnalysis: "Project\n" + + " ├─ columns: [min(cn.name) as from_company, min(lt.link) as movie_link_type, min(t.title) as non_polish_sequel_movie]\n" + + " └─ GroupBy\n" + + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + + " ├─ Grouping()\n" + + " └─ InnerJoin\n" + + " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -991,263 +962,240 @@ WHERE cn.country_code !='[pl]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->from_company:0, min(lt.link):1!null->movie_link_type:0, min(t.title):2!null->sequel_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(lt.link:5!null), MIN(t.title:18!null)\n" + + " ├─ select: MIN(cn.name:18!null), MIN(lt.link:12!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:2!null\n" + - " │ │ │ └─ t.id:17!null\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:17!null\n" + - " │ │ └─ mk.movie_id:15!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:17!null\n" + - " │ └─ mc.movie_id:6!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:16!null\n" + - " │ │ └─ k.id:0!null\n" + - " │ ├─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ sequel (longtext)\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:14!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:2!null\n" + - " │ │ └─ mk.movie_id:15!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:2!null\n" + - " │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ lt.id:4!null\n" + - " │ │ │ │ └─ ml.link_type_id:3!null\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ lt.link LIKE '%follows%'\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id link]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_type_id:8!null\n" + - " │ │ │ └─ ct.id:13!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.company_id:7!null\n" + - " │ │ │ │ └─ cn.id:10!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mc.note:3 IS NULL\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ │ └─ Or\n" + - " │ │ │ │ ├─ cn.name LIKE '%Film%'\n" + - " │ │ │ │ └─ cn.name LIKE '%Warner%'\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ └─ production companies (longtext)\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:6!null]\n" + - " │ ├─ colSet: (20-22)\n" + - " │ ├─ tableId: 6\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ml.movie_id:2!null, mk.movie_id:15!null, mc.movie_id:6!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 1998 (int)\n" + + " │ │ └─ t.title LIKE '%Money%'\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ lt.id:11!null\n" + + " │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 1998 (int)\n" + - " │ └─ t.title LIKE '%Money%'\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ └─ k.id:13!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_type_id:9!null\n" + + " │ │ └─ ct.id:15!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:8!null\n" + + " │ └─ cn.id:17!null\n" + + " ├─ Filter\n" + + " │ ├─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follows%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ sequel (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [pl] (longtext)\n" + + " │ └─ Or\n" + + " │ ├─ cn.name LIKE '%Film%'\n" + + " │ └─ cn.name LIKE '%Warner%'\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as from_company, min(lt.link) as movie_link_type, min(t.title) as sequel_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ lt.link LIKE '%follows%'\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id link]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (mc.company_type_id = ct.id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year = 1998) AND t.title LIKE '%Money%')\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year = 1998) AND t.title LIKE '%Money%')\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follows%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as from_company, min(lt.link) as movie_link_type, min(t.title) as sequel_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ lt.link LIKE '%follows%'\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id link]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (mc.company_type_id = ct.id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year = 1998) AND t.title LIKE '%Money%')\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year = 1998) AND t.title LIKE '%Money%')\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follows%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -1288,274 +1236,251 @@ WHERE cn.country_code !='[pl]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->from_company:0, min(mc.note):1!null->production_note:0, min(t.title):2!null->movie_based_on_book:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:10!null), MIN(mc.note:8), MIN(t.title:17!null)\n" + + " ├─ select: MIN(cn.name:17!null), MIN(mc.note:10), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:2!null\n" + - " │ │ │ └─ t.id:16!null\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:16!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:16!null\n" + - " │ └─ mc.movie_id:5!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:15!null\n" + - " │ │ └─ k.id:0!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ TUPLE(sequel (longtext), revenge (longtext), based-on-novel (longtext))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:13!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:2!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:2!null\n" + - " │ │ │ └─ mc.movie_id:5!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ lt.id:4!null\n" + - " │ │ │ │ └─ ml.link_type_id:3!null\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_type_id:7!null\n" + - " │ │ │ └─ ct.id:12!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.company_id:6!null\n" + - " │ │ │ │ └─ cn.id:9!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ mc.note:3 IS NULL\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ │ └─ Or\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ │ │ └─ 20th Century Fox (longtext)\n" + - " │ │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ │ └─ 20th Century Foxÿ (longtext)\n" + - " │ │ │ │ └─ AND\n" + - " │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ │ └─ Twentieth Century Fox (longtext)\n" + - " │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ └─ Twentieth Century Foxÿ (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ │ └─ production companies (longtext)\n" + - " │ │ │ └─ NOT\n" + - " │ │ │ └─ ct.kind:1!null IS NULL\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:5!null]\n" + - " │ ├─ colSet: (20-22)\n" + - " │ ├─ tableId: 6\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ml.movie_id:2!null, mk.movie_id:14!null, mc.movie_id:5!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ GreaterThan\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 1950 (int)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1950 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ lt.id:11!null\n" + + " │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ └─ k.id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_type_id:9!null\n" + + " │ │ └─ ct.id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:8!null\n" + + " │ └─ cn.id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(sequel (longtext), revenge (longtext), based-on-novel (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ct.kind:1!null\n" + + " │ │ │ └─ production companies (longtext)\n" + + " │ │ └─ NOT\n" + + " │ │ └─ ct.kind:1!null IS NULL\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [pl] (longtext)\n" + + " │ └─ Or\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ cn.name:1!null\n" + + " │ │ │ └─ 20th Century Fox (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ cn.name:1!null\n" + + " │ │ └─ 20th Century Foxÿ (longtext)\n" + + " │ └─ AND\n" + + " │ ├─ GreaterThanOrEqual\n" + + " │ │ ├─ cn.name:1!null\n" + + " │ │ └─ Twentieth Century Fox (longtext)\n" + + " │ └─ LessThanOrEqual\n" + + " │ ├─ cn.name:1!null\n" + + " │ └─ Twentieth Century Foxÿ (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as from_company, min(mc.note) as production_note, min(t.title) as movie_based_on_book]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(mc.note), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword HASH IN ('sequel', 'revenge', 'based-on-novel'))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (mc.company_type_id = ct.id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (NOT(mc.note IS NULL))\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (((cn.name >= '20th Century Fox') AND (cn.name <= '20th Century Foxÿ')) OR ((cn.name >= 'Twentieth Century Fox') AND (cn.name <= 'Twentieth Century Foxÿ'))))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((ct.kind = 'production companies'))) AND (NOT(ct.kind IS NULL)))\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 1950)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1950)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(mc.note IS NULL))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('sequel', 'revenge', 'based-on-novel'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((ct.kind = 'production companies'))) AND (NOT(ct.kind IS NULL)))\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (((cn.name >= '20th Century Fox') AND (cn.name <= '20th Century Foxÿ')) OR ((cn.name >= 'Twentieth Century Fox') AND (cn.name <= 'Twentieth Century Foxÿ'))))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as from_company, min(mc.note) as production_note, min(t.title) as movie_based_on_book]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(mc.note), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword HASH IN ('sequel', 'revenge', 'based-on-novel'))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (mc.company_type_id = ct.id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (NOT(mc.note IS NULL))\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (((cn.name >= '20th Century Fox') AND (cn.name <= '20th Century Foxÿ')) OR ((cn.name >= 'Twentieth Century Fox') AND (cn.name <= 'Twentieth Century Foxÿ'))))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((ct.kind = 'production companies'))) AND (NOT(ct.kind IS NULL)))\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 1950)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + - "", - }, + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1950)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(mc.note IS NULL))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('sequel', 'revenge', 'based-on-novel'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((ct.kind = 'production companies'))) AND (NOT(ct.kind IS NULL)))\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (((cn.name >= '20th Century Fox') AND (cn.name <= '20th Century Foxÿ')) OR ((cn.name >= 'Twentieth Century Fox') AND (cn.name <= 'Twentieth Century Foxÿ'))))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + + "", + }, { Query: ` SELECT MIN(cn.name) AS from_company, @@ -1592,256 +1517,233 @@ WHERE cn.country_code !='[pl]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->from_company:0, min(mc.note):1!null->production_note:0, min(t.title):2!null->movie_based_on_book:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:10!null), MIN(mc.note:8), MIN(t.title:17!null)\n" + + " ├─ select: MIN(cn.name:17!null), MIN(mc.note:10), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:2!null\n" + - " │ │ │ └─ t.id:16!null\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:16!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:16!null\n" + - " │ └─ mc.movie_id:5!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:15!null\n" + - " │ │ └─ k.id:0!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ TUPLE(sequel (longtext), revenge (longtext), based-on-novel (longtext))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:13!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:2!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:2!null\n" + - " │ │ │ └─ mc.movie_id:5!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ lt.id:4!null\n" + - " │ │ │ │ └─ ml.link_type_id:3!null\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_type_id:7!null\n" + - " │ │ │ └─ ct.id:12!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.company_id:6!null\n" + - " │ │ │ │ └─ cn.id:9!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ mc.note:3 IS NULL\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ │ └─ production companies (longtext)\n" + - " │ │ │ └─ NOT\n" + - " │ │ │ └─ ct.kind:1!null IS NULL\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:5!null]\n" + - " │ ├─ colSet: (20-22)\n" + - " │ ├─ tableId: 6\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ml.movie_id:2!null, mk.movie_id:14!null, mc.movie_id:5!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ GreaterThan\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 1950 (int)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1950 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ lt.id:11!null\n" + + " │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ └─ k.id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_type_id:9!null\n" + + " │ │ └─ ct.id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:8!null\n" + + " │ └─ cn.id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(sequel (longtext), revenge (longtext), based-on-novel (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ct.kind:1!null\n" + + " │ │ │ └─ production companies (longtext)\n" + + " │ │ └─ NOT\n" + + " │ │ └─ ct.kind:1!null IS NULL\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ NOT\n" + + " │ └─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [pl] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as from_company, min(mc.note) as production_note, min(t.title) as movie_based_on_book]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(mc.note), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword HASH IN ('sequel', 'revenge', 'based-on-novel'))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (mc.company_type_id = ct.id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (NOT(mc.note IS NULL))\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (NOT((cn.country_code = '[pl]')))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((ct.kind = 'production companies'))) AND (NOT(ct.kind IS NULL)))\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 1950)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1950)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(mc.note IS NULL))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('sequel', 'revenge', 'based-on-novel'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((ct.kind = 'production companies'))) AND (NOT(ct.kind IS NULL)))\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[pl]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as from_company, min(mc.note) as production_note, min(t.title) as movie_based_on_book]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(mc.note), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword HASH IN ('sequel', 'revenge', 'based-on-novel'))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ │ ├─ TableAlias(ml)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_link\n" + - " │ │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ │ └─ TableAlias(lt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: link_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (mc.company_type_id = ct.id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (NOT(mc.note IS NULL))\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (NOT((cn.country_code = '[pl]')))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((ct.kind = 'production companies'))) AND (NOT(ct.kind IS NULL)))\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 1950)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1950)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(mc.note IS NULL))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('sequel', 'revenge', 'based-on-novel'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((ct.kind = 'production companies'))) AND (NOT(ct.kind IS NULL)))\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[pl]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -1880,273 +1782,250 @@ WHERE cn.country_code = '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->drama_horror_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(mi_idx.info:4!null), MIN(t.title:19!null)\n" + + " ├─ select: MIN(cn.name:19!null), MIN(mi_idx.info:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:18!null\n" + - " │ │ │ └─ mi.movie_id:15!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:6!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:18!null\n" + - " │ │ └─ mi_idx.movie_id:2!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:18!null\n" + - " │ └─ mc.movie_id:7!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi.info_type_id:16!null\n" + - " │ │ └─ it1.id:0!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ genres (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(it1.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mi.info_type_id:14!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:15!null\n" + - " │ │ └─ mi_idx.movie_id:2!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.movie_id:7!null\n" + - " │ │ │ └─ mi_idx.movie_id:2!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi_idx.info_type_id:3!null\n" + - " │ │ │ │ └─ it2.id:5!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ │ └─ 8.0 (longtext)\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ rating (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (12,13)\n" + - " │ │ │ └─ tableId: 4\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:13!null\n" + - " │ │ │ └─ mc.company_type_id:9!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:10!null\n" + - " │ │ │ │ └─ mc.company_id:8!null\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ └─ production companies (longtext)\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ mi.info:2!null\n" + - " │ │ └─ TUPLE(Drama (longtext), Horror (longtext))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:7!null]\n" + - " │ ├─ colSet: (19-23)\n" + - " │ ├─ tableId: 6\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:15!null, mi_idx.movie_id:2!null, mc.movie_id:7!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2005 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2008 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi_idx.info_type_id:4!null\n" + + " │ │ │ └─ it2.id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:9!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi.movie_id:6!null\n" + + " │ └─ mi_idx.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2005 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2008 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.info_type_id:7!null\n" + + " │ │ └─ it1.id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:9!null\n" + + " │ └─ mi.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Drama (longtext), Horror (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.id:16!null\n" + + " │ │ └─ mc.company_type_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:18!null\n" + + " │ └─ mc.company_id:10!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as drama_horror_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mi.info_type_id = it1.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (it1.info = 'genres')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (it1.id)\n" + - " │ ├─ right-key: (mi.info_type_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.movie_id = mi_idx.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi_idx.info_type_id = it2.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '8.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Drama', 'Horror'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ columns: [movie_id info_type_id info]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2005) AND (t.production_year <= 2008))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2005) AND (t.production_year <= 2008))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi_idx.info_type_id = it2.id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi.movie_id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '8.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.info_type_id = it1.id) AND (mc.movie_id = mi.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Drama', 'Horror'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as drama_horror_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mi.info_type_id = it1.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (it1.info = 'genres')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (it1.id)\n" + - " │ ├─ right-key: (mi.info_type_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.movie_id = mi_idx.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi_idx.info_type_id = it2.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '8.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Drama', 'Horror'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ columns: [movie_id info_type_id info]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2005) AND (t.production_year <= 2008))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2005) AND (t.production_year <= 2008))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi_idx.info_type_id = it2.id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi.movie_id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '8.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.info_type_id = it1.id) AND (mc.movie_id = mi.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Drama', 'Horror'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -2185,270 +2064,247 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->budget:0, min(t.title):1!null->unsuccsessful_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:15!null), MIN(t.title:17!null)\n" + + " ├─ select: MIN(mi.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:16!null\n" + - " │ │ │ └─ mi.movie_id:13!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:5!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:16!null\n" + - " │ │ └─ mi_idx.movie_id:2!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:16!null\n" + - " │ └─ mc.movie_id:6!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi.info_type_id:14!null\n" + - " │ │ └─ it1.id:0!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ budget (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(it1.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mi.info_type_id:12!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:13!null\n" + - " │ │ └─ mi_idx.movie_id:2!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.movie_id:6!null\n" + - " │ │ │ └─ mi_idx.movie_id:2!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi_idx.info_type_id:3!null\n" + - " │ │ │ │ └─ it2.id:4!null\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ bottom 10 rank (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (12,13)\n" + - " │ │ │ └─ tableId: 4\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:11!null\n" + - " │ │ │ └─ mc.company_type_id:8!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:9!null\n" + - " │ │ │ │ └─ mc.company_id:7!null\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ ct.kind:1!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ │ └─ production companies (longtext)\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ └─ distributors (longtext)\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:6!null]\n" + - " │ ├─ colSet: (19-23)\n" + - " │ ├─ tableId: 6\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:13!null, mi_idx.movie_id:2!null, mc.movie_id:6!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:8!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThan\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2000 (int)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ │ ├─ t.title:1!null\n" + + " │ │ │ │ └─ Birdemic (longtext)\n" + + " │ │ │ └─ LessThanOrEqual\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ Birdemicÿ (longtext)\n" + + " │ │ └─ t.title LIKE '%Movie%'\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi_idx.info_type_id:4!null\n" + + " │ │ │ └─ it2.id:11!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:8!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi.movie_id:5!null\n" + + " │ └─ mi_idx.movie_id:3!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ GreaterThan\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2000 (int)\n" + - " │ └─ Or\n" + - " │ ├─ AND\n" + - " │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ ├─ t.title:1!null\n" + - " │ │ │ └─ Birdemic (longtext)\n" + - " │ │ └─ LessThanOrEqual\n" + - " │ │ ├─ t.title:1!null\n" + - " │ │ └─ Birdemicÿ (longtext)\n" + - " │ └─ t.title LIKE '%Movie%'\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + - "", - ExpectedEstimates: "Project\n" + - " ├─ columns: [min(mi.info) as budget, min(t.title) as unsuccsessful_movie]\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.info_type_id:6!null\n" + + " │ │ └─ it1.id:13!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:8!null\n" + + " │ └─ mi.movie_id:5!null\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.id:15!null\n" + + " │ │ └─ mc.company_type_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:17!null\n" + + " │ └─ mc.company_id:9!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ bottom 10 rank (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ budget (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ ct.kind:1!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ct.kind:1!null\n" + + " │ │ │ └─ production companies (longtext)\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ distributors (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:1\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + + "", + ExpectedEstimates: "Project\n" + + " ├─ columns: [min(mi.info) as budget, min(t.title) as unsuccsessful_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mi.info_type_id = it1.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (it1.info = 'budget')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (it1.id)\n" + - " │ ├─ right-key: (mi.info_type_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.movie_id = mi_idx.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi_idx.info_type_id = it2.id)\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'bottom 10 rank')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(ct.kind IS NULL)) AND ((ct.kind = 'production companies') OR (ct.kind = 'distributors')))\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ columns: [movie_id info_type_id info]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year > 2000) AND (((t.title >= 'Birdemic') AND (t.title <= 'Birdemicÿ')) OR t.title LIKE '%Movie%'))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year > 2000) AND (((t.title >= 'Birdemic') AND (t.title <= 'Birdemicÿ')) OR t.title LIKE '%Movie%'))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi_idx.info_type_id = it2.id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi.movie_id = mi_idx.movie_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.info_type_id = it1.id) AND (mc.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'bottom 10 rank')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'budget')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(ct.kind IS NULL)) AND ((ct.kind = 'production companies') OR (ct.kind = 'distributors')))\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as budget, min(t.title) as unsuccsessful_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mi.info_type_id = it1.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (it1.info = 'budget')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (it1.id)\n" + - " │ ├─ right-key: (mi.info_type_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.movie_id = mi_idx.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi_idx.info_type_id = it2.id)\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'bottom 10 rank')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(ct.kind IS NULL)) AND ((ct.kind = 'production companies') OR (ct.kind = 'distributors')))\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ columns: [movie_id info_type_id info]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year > 2000) AND (((t.title >= 'Birdemic') AND (t.title <= 'Birdemicÿ')) OR t.title LIKE '%Movie%'))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year > 2000) AND (((t.title >= 'Birdemic') AND (t.title <= 'Birdemicÿ')) OR t.title LIKE '%Movie%'))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi_idx.info_type_id = it2.id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi.movie_id = mi_idx.movie_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.info_type_id = it1.id) AND (mc.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'bottom 10 rank')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'budget')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(ct.kind IS NULL)) AND ((ct.kind = 'production companies') OR (ct.kind = 'distributors')))\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", }, { @@ -2489,273 +2345,250 @@ WHERE cn.country_code = '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->mainstream_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(mi_idx.info:4!null), MIN(t.title:19!null)\n" + + " ├─ select: MIN(cn.name:19!null), MIN(mi_idx.info:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:18!null\n" + - " │ │ │ └─ mi.movie_id:15!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:6!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:18!null\n" + - " │ │ └─ mi_idx.movie_id:2!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:18!null\n" + - " │ └─ mc.movie_id:7!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi.info_type_id:16!null\n" + - " │ │ └─ it1.id:0!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ genres (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(it1.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mi.info_type_id:14!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:15!null\n" + - " │ │ └─ mi_idx.movie_id:2!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.movie_id:7!null\n" + - " │ │ │ └─ mi_idx.movie_id:2!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi_idx.info_type_id:3!null\n" + - " │ │ │ │ └─ it2.id:5!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ │ └─ 7.0 (longtext)\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ rating (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (12,13)\n" + - " │ │ │ └─ tableId: 4\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:13!null\n" + - " │ │ │ └─ mc.company_type_id:9!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:10!null\n" + - " │ │ │ │ └─ mc.company_id:8!null\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ └─ production companies (longtext)\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ mi.info:2!null\n" + - " │ │ └─ TUPLE(Drama (longtext), Horror (longtext), Western (longtext), Family (longtext))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:7!null]\n" + - " │ ├─ colSet: (19-23)\n" + - " │ ├─ tableId: 6\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:15!null, mi_idx.movie_id:2!null, mc.movie_id:7!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2000 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi_idx.info_type_id:4!null\n" + + " │ │ │ └─ it2.id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:9!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi.movie_id:6!null\n" + + " │ └─ mi_idx.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 7.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2000 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2010 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.info_type_id:7!null\n" + + " │ │ └─ it1.id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:9!null\n" + + " │ └─ mi.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Drama (longtext), Horror (longtext), Western (longtext), Family (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.id:16!null\n" + + " │ │ └─ mc.company_type_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:18!null\n" + + " │ └─ mc.company_id:10!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as mainstream_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mi.info_type_id = it1.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (it1.info = 'genres')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (it1.id)\n" + - " │ ├─ right-key: (mi.info_type_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.movie_id = mi_idx.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi_idx.info_type_id = it2.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '7.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Drama', 'Horror', 'Western', 'Family'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ columns: [movie_id info_type_id info]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi_idx.info_type_id = it2.id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi.movie_id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '7.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.info_type_id = it1.id) AND (mc.movie_id = mi.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Drama', 'Horror', 'Western', 'Family'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as mainstream_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (mi.info_type_id = it1.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (it1.info = 'genres')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (it1.id)\n" + - " │ ├─ right-key: (mi.info_type_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.movie_id = mi_idx.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi_idx.info_type_id = it2.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '7.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Drama', 'Horror', 'Western', 'Family'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ IndexedTableAccess(movie_info)\n" + - " │ ├─ index: [movie_info.movie_id]\n" + - " │ ├─ columns: [movie_id info_type_id info]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi_idx.info_type_id = it2.id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi.movie_id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '7.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.info_type_id = it1.id) AND (mc.movie_id = mi.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Drama', 'Horror', 'Western', 'Family'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -2793,270 +2626,250 @@ WHERE cn.country_code ='[de]' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->release_date:0, min(miidx.info):1!null->rating:0, min(t.title):2!null->german_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:16!null), MIN(miidx.info:21!null), MIN(t.title:10!null)\n" + + " ├─ select: MIN(mi.info:8!null), MIN(miidx.info:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ it.id:0!null\n" + - " │ └─ miidx.info_type_id:20!null\n" + - " ├─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ rating (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(it.id:0!null)\n" + - " ├─ right-key: TUPLE(miidx.info_type_id:18!null)\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:6!null\n" + + " │ │ │ │ └─ t.id:0!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ kt.id:12!null\n" + + " │ │ │ └─ t.kind_id:2!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:9!null\n" + + " │ │ └─ t.id:0!null\n" + + " │ └─ Eq\n" + + " │ ├─ miidx.movie_id:3!null\n" + + " │ └─ t.id:0!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ it.id:16!null\n" + + " │ │ │ └─ miidx.info_type_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:6!null\n" + + " │ │ └─ miidx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ miidx.movie_id:3!null\n" + + " │ └─ mc.movie_id:9!null\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:14!null\n" + - " │ │ └─ mc.movie_id:2!null\n" + + " │ │ ├─ it2.id:14!null\n" + + " │ │ └─ mi.info_type_id:7!null\n" + " │ └─ Eq\n" + - " │ ├─ miidx.movie_id:19!null\n" + - " │ └─ mc.movie_id:2!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:7!null\n" + - " │ │ └─ mc.company_type_id:4!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:5!null\n" + - " │ │ │ └─ mc.company_id:3!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ └─ [de] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.kind:1!null\n" + - " │ │ └─ production companies (longtext)\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mc.movie_id:2!null, mc.movie_id:2!null)\n" + - " ├─ right-key: TUPLE(mi.movie_id:5!null, miidx.movie_id:10!null)\n" + - " └─ LookupJoin\n" + - " ├─ Eq\n" + - " │ ├─ miidx.movie_id:19!null\n" + - " │ └─ t.id:9!null\n" + - " ├─ InnerJoin\n" + + " │ ├─ mi.movie_id:6!null\n" + + " │ └─ mc.movie_id:9!null\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.id:20!null\n" + + " │ │ └─ mc.company_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:18!null\n" + + " │ └─ mc.company_type_id:11!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:14!null\n" + - " │ │ └─ t.id:9!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.id:12!null\n" + - " │ │ │ └─ t.kind_id:11!null\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ └─ movie (longtext)\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it2.id:17!null\n" + - " │ │ └─ mi.info_type_id:15!null\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it2.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (12,13)\n" + - " │ └─ tableId: 4\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ keys: [mi.movie_id:14!null]\n" + - " ├─ colSet: (26-30)\n" + - " ├─ tableId: 8\n" + - " └─ Table\n" + - " ├─ name: movie_info_idx\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:1\n" + + " │ └─ [de] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as release_date, min(miidx.info) as rating, min(t.title) as german_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(miidx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (it.id = miidx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (it.info = 'rating')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (it.id)\n" + - " ├─ right-key: (miidx.info_type_id)\n" + - " └─ HashJoin\n" + - " ├─ ((mi.movie_id = mc.movie_id) AND (miidx.movie_id = mc.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[de]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mc.movie_id, mc.movie_id)\n" + - " ├─ right-key: (mi.movie_id, miidx.movie_id)\n" + - " └─ LookupJoin\n" + - " ├─ (miidx.movie_id = t.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mi.movie_id = t.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it2.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it2.info = 'release dates')\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ columns: [movie_id info_type_id info]\n" + - " └─ keys: mi.movie_id\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = t.id) AND (kt.id = t.kind_id)) AND (mc.movie_id = t.id)) AND (miidx.movie_id = t.id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((it.id = miidx.info_type_id) AND (mi.movie_id = miidx.movie_id)) AND (miidx.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi.info_type_id) AND (mi.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((cn.id = mc.company_id) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'release dates')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'rating')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[de]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as release_date, min(miidx.info) as rating, min(t.title) as german_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(miidx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (it.id = miidx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (it.info = 'rating')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (it.id)\n" + - " ├─ right-key: (miidx.info_type_id)\n" + - " └─ HashJoin\n" + - " ├─ ((mi.movie_id = mc.movie_id) AND (miidx.movie_id = mc.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[de]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mc.movie_id, mc.movie_id)\n" + - " ├─ right-key: (mi.movie_id, miidx.movie_id)\n" + - " └─ LookupJoin\n" + - " ├─ (miidx.movie_id = t.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mi.movie_id = t.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it2.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it2.info = 'release dates')\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ columns: [movie_id info_type_id info]\n" + - " └─ keys: mi.movie_id\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = t.id) AND (kt.id = t.kind_id)) AND (mc.movie_id = t.id)) AND (miidx.movie_id = t.id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((it.id = miidx.info_type_id) AND (mi.movie_id = miidx.movie_id)) AND (miidx.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi.info_type_id) AND (mi.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((cn.id = mc.company_id) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'release dates')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'rating')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[de]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", }, { @@ -3097,283 +2910,263 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->producing_company:0, min(miidx.info):1!null->rating:0, min(t.title):2!null->movie_about_winning:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:6!null), MIN(miidx.info:21!null), MIN(t.title:11!null)\n" + + " ├─ select: MIN(cn.name:20!null), MIN(miidx.info:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ it.id:0!null\n" + - " │ └─ miidx.info_type_id:20!null\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:6!null\n" + + " │ │ │ │ └─ t.id:0!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ kt.id:11!null\n" + + " │ │ │ └─ t.kind_id:2!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:8!null\n" + + " │ │ └─ t.id:0!null\n" + + " │ └─ Eq\n" + + " │ ├─ miidx.movie_id:3!null\n" + + " │ └─ t.id:0!null\n" + " ├─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ rating (longtext)\n" + - " │ └─ TableAlias(it)\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ (longtext)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ t.title LIKE '%Champion%'\n" + + " │ │ └─ t.title LIKE '%Loser%'\n" + + " │ └─ TableAlias(t)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(it.id:0!null)\n" + - " ├─ right-key: TUPLE(miidx.info_type_id:18!null)\n" + - " └─ HashJoin\n" + - " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:15!null\n" + - " │ │ └─ mc.movie_id:2!null\n" + - " │ └─ Eq\n" + - " │ ├─ miidx.movie_id:19!null\n" + - " │ └─ mc.movie_id:2!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:8!null\n" + - " │ │ └─ mc.company_type_id:4!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:5!null\n" + - " │ │ │ └─ mc.company_id:3!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ └─ [us] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.kind:1!null\n" + - " │ │ └─ production companies (longtext)\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mc.movie_id:2!null, mc.movie_id:2!null)\n" + - " ├─ right-key: TUPLE(mi.movie_id:5!null, miidx.movie_id:9!null)\n" + - " └─ LookupJoin\n" + - " ├─ Eq\n" + - " │ ├─ miidx.movie_id:19!null\n" + - " │ └─ t.id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:15!null\n" + - " │ │ └─ t.id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.id:13!null\n" + - " │ │ │ └─ t.kind_id:12!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ t.title:1!null\n" + - " │ │ │ │ │ └─ (longtext)\n" + - " │ │ │ │ └─ Or\n" + - " │ │ │ │ ├─ t.title LIKE '%Champion%'\n" + - " │ │ │ │ └─ t.title LIKE '%Loser%'\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ └─ movie (longtext)\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it2.id:17!null\n" + - " │ │ └─ mi.info_type_id:16!null\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it2.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (12,13)\n" + - " │ └─ tableId: 4\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ keys: [mi.movie_id:15!null]\n" + - " ├─ colSet: (26-30)\n" + - " ├─ tableId: 8\n" + - " └─ Table\n" + - " ├─ name: movie_info_idx\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ it.id:15!null\n" + + " │ │ │ └─ miidx.info_type_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:6!null\n" + + " │ │ └─ miidx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ miidx.movie_id:3!null\n" + + " │ └─ mc.movie_id:8!null\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.id:13!null\n" + + " │ │ └─ mi.info_type_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi.movie_id:6!null\n" + + " │ └─ mc.movie_id:8!null\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.id:19!null\n" + + " │ │ └─ mc.company_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:17!null\n" + + " │ └─ mc.company_type_id:10!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(miidx.info) as rating, min(t.title) as movie_about_winning]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(miidx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (it.id = miidx.info_type_id)\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = t.id) AND (kt.id = t.kind_id)) AND (mc.movie_id = t.id)) AND (miidx.movie_id = t.id))\n" + " ├─ Filter\n" + - " │ ├─ (it.info = 'rating')\n" + - " │ └─ TableAlias(it)\n" + + " │ ├─ ((NOT((t.title = ''))) AND (t.title LIKE '%Champion%' OR t.title LIKE '%Loser%'))\n" + + " │ └─ TableAlias(t)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (it.id)\n" + - " ├─ right-key: (miidx.info_type_id)\n" + - " └─ HashJoin\n" + - " ├─ ((mi.movie_id = mc.movie_id) AND (miidx.movie_id = mc.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mc.movie_id, mc.movie_id)\n" + - " ├─ right-key: (mi.movie_id, miidx.movie_id)\n" + - " └─ LookupJoin\n" + - " ├─ (miidx.movie_id = t.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mi.movie_id = t.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((NOT((t.title = ''))) AND (t.title LIKE '%Champion%' OR t.title LIKE '%Loser%'))\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it2.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it2.info = 'release dates')\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ columns: [movie_id info_type_id info]\n" + - " └─ keys: mi.movie_id\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((it.id = miidx.info_type_id) AND (mi.movie_id = miidx.movie_id)) AND (miidx.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi.info_type_id) AND (mi.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((cn.id = mc.company_id) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'release dates')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'rating')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(miidx.info) as rating, min(t.title) as movie_about_winning]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(miidx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (it.id = miidx.info_type_id)\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = t.id) AND (kt.id = t.kind_id)) AND (mc.movie_id = t.id)) AND (miidx.movie_id = t.id))\n" + " ├─ Filter\n" + - " │ ├─ (it.info = 'rating')\n" + - " │ └─ TableAlias(it)\n" + + " │ ├─ ((NOT((t.title = ''))) AND (t.title LIKE '%Champion%' OR t.title LIKE '%Loser%'))\n" + + " │ └─ TableAlias(t)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (it.id)\n" + - " ├─ right-key: (miidx.info_type_id)\n" + - " └─ HashJoin\n" + - " ├─ ((mi.movie_id = mc.movie_id) AND (miidx.movie_id = mc.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mc.movie_id, mc.movie_id)\n" + - " ├─ right-key: (mi.movie_id, miidx.movie_id)\n" + - " └─ LookupJoin\n" + - " ├─ (miidx.movie_id = t.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mi.movie_id = t.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((NOT((t.title = ''))) AND (t.title LIKE '%Champion%' OR t.title LIKE '%Loser%'))\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it2.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it2.info = 'release dates')\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ columns: [movie_id info_type_id info]\n" + - " └─ keys: mi.movie_id\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((it.id = miidx.info_type_id) AND (mi.movie_id = miidx.movie_id)) AND (miidx.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi.info_type_id) AND (mi.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((cn.id = mc.company_id) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'release dates')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'rating')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -3414,295 +3207,275 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->producing_company:0, min(miidx.info):1!null->rating:0, min(t.title):2!null->movie_about_winning:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:6!null), MIN(miidx.info:21!null), MIN(t.title:11!null)\n" + + " ├─ select: MIN(cn.name:20!null), MIN(miidx.info:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ it.id:0!null\n" + - " │ └─ miidx.info_type_id:20!null\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:6!null\n" + + " │ │ │ │ └─ t.id:0!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ kt.id:11!null\n" + + " │ │ │ └─ t.kind_id:2!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:8!null\n" + + " │ │ └─ t.id:0!null\n" + + " │ └─ Eq\n" + + " │ ├─ miidx.movie_id:3!null\n" + + " │ └─ t.id:0!null\n" + " ├─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ rating (longtext)\n" + - " │ └─ TableAlias(it)\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ (longtext)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ │ ├─ t.title:1!null\n" + + " │ │ │ │ └─ Champion (longtext)\n" + + " │ │ │ └─ LessThanOrEqual\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ Championÿ (longtext)\n" + + " │ │ └─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ Loser (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.title:1!null\n" + + " │ │ └─ Loserÿ (longtext)\n" + + " │ └─ TableAlias(t)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(it.id:0!null)\n" + - " ├─ right-key: TUPLE(miidx.info_type_id:18!null)\n" + - " └─ HashJoin\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ it.id:15!null\n" + + " │ │ │ └─ miidx.info_type_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:6!null\n" + + " │ │ └─ miidx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ miidx.movie_id:3!null\n" + + " │ └─ mc.movie_id:8!null\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:15!null\n" + - " │ │ └─ mc.movie_id:2!null\n" + + " │ │ ├─ it2.id:13!null\n" + + " │ │ └─ mi.info_type_id:7!null\n" + " │ └─ Eq\n" + - " │ ├─ miidx.movie_id:19!null\n" + - " │ └─ mc.movie_id:2!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:8!null\n" + - " │ │ └─ mc.company_type_id:4!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:5!null\n" + - " │ │ │ └─ mc.company_id:3!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ └─ [us] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.kind:1!null\n" + - " │ │ └─ production companies (longtext)\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mc.movie_id:2!null, mc.movie_id:2!null)\n" + - " ├─ right-key: TUPLE(mi.movie_id:5!null, miidx.movie_id:9!null)\n" + - " └─ LookupJoin\n" + - " ├─ Eq\n" + - " │ ├─ miidx.movie_id:19!null\n" + - " │ └─ t.id:10!null\n" + - " ├─ InnerJoin\n" + + " │ ├─ mi.movie_id:6!null\n" + + " │ └─ mc.movie_id:8!null\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.id:19!null\n" + + " │ │ └─ mc.company_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:17!null\n" + + " │ └─ mc.company_type_id:10!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:15!null\n" + - " │ │ └─ t.id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.id:13!null\n" + - " │ │ │ └─ t.kind_id:12!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ t.title:1!null\n" + - " │ │ │ │ │ └─ (longtext)\n" + - " │ │ │ │ └─ Or\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ │ ├─ t.title:1!null\n" + - " │ │ │ │ │ │ └─ Champion (longtext)\n" + - " │ │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ │ ├─ t.title:1!null\n" + - " │ │ │ │ │ └─ Championÿ (longtext)\n" + - " │ │ │ │ └─ AND\n" + - " │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ ├─ t.title:1!null\n" + - " │ │ │ │ │ └─ Loser (longtext)\n" + - " │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ ├─ t.title:1!null\n" + - " │ │ │ │ └─ Loserÿ (longtext)\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ └─ movie (longtext)\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it2.id:17!null\n" + - " │ │ └─ mi.info_type_id:16!null\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it2.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (12,13)\n" + - " │ └─ tableId: 4\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ keys: [mi.movie_id:15!null]\n" + - " ├─ colSet: (26-30)\n" + - " ├─ tableId: 8\n" + - " └─ Table\n" + - " ├─ name: movie_info_idx\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(miidx.info) as rating, min(t.title) as movie_about_winning]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(miidx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (it.id = miidx.info_type_id)\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = t.id) AND (kt.id = t.kind_id)) AND (mc.movie_id = t.id)) AND (miidx.movie_id = t.id))\n" + " ├─ Filter\n" + - " │ ├─ (it.info = 'rating')\n" + - " │ └─ TableAlias(it)\n" + + " │ ├─ ((NOT((t.title = ''))) AND (((t.title >= 'Champion') AND (t.title <= 'Championÿ')) OR ((t.title >= 'Loser') AND (t.title <= 'Loserÿ'))))\n" + + " │ └─ TableAlias(t)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (it.id)\n" + - " ├─ right-key: (miidx.info_type_id)\n" + - " └─ HashJoin\n" + - " ├─ ((mi.movie_id = mc.movie_id) AND (miidx.movie_id = mc.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mc.movie_id, mc.movie_id)\n" + - " ├─ right-key: (mi.movie_id, miidx.movie_id)\n" + - " └─ LookupJoin\n" + - " ├─ (miidx.movie_id = t.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mi.movie_id = t.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((NOT((t.title = ''))) AND (((t.title >= 'Champion') AND (t.title <= 'Championÿ')) OR ((t.title >= 'Loser') AND (t.title <= 'Loserÿ'))))\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it2.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it2.info = 'release dates')\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ columns: [movie_id info_type_id info]\n" + - " └─ keys: mi.movie_id\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((it.id = miidx.info_type_id) AND (mi.movie_id = miidx.movie_id)) AND (miidx.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi.info_type_id) AND (mi.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((cn.id = mc.company_id) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'release dates')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'rating')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(miidx.info) as rating, min(t.title) as movie_about_winning]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(miidx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (it.id = miidx.info_type_id)\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = t.id) AND (kt.id = t.kind_id)) AND (mc.movie_id = t.id)) AND (miidx.movie_id = t.id))\n" + " ├─ Filter\n" + - " │ ├─ (it.info = 'rating')\n" + - " │ └─ TableAlias(it)\n" + + " │ ├─ ((NOT((t.title = ''))) AND (((t.title >= 'Champion') AND (t.title <= 'Championÿ')) OR ((t.title >= 'Loser') AND (t.title <= 'Loserÿ'))))\n" + + " │ └─ TableAlias(t)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (it.id)\n" + - " ├─ right-key: (miidx.info_type_id)\n" + - " └─ HashJoin\n" + - " ├─ ((mi.movie_id = mc.movie_id) AND (miidx.movie_id = mc.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mc.movie_id, mc.movie_id)\n" + - " ├─ right-key: (mi.movie_id, miidx.movie_id)\n" + - " └─ LookupJoin\n" + - " ├─ (miidx.movie_id = t.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mi.movie_id = t.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((NOT((t.title = ''))) AND (((t.title >= 'Champion') AND (t.title <= 'Championÿ')) OR ((t.title >= 'Loser') AND (t.title <= 'Loserÿ'))))\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it2.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it2.info = 'release dates')\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ columns: [movie_id info_type_id info]\n" + - " └─ keys: mi.movie_id\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((it.id = miidx.info_type_id) AND (mi.movie_id = miidx.movie_id)) AND (miidx.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi.info_type_id) AND (mi.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((cn.id = mc.company_id) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'release dates')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'rating')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -3740,270 +3513,250 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->producing_company:0, min(miidx.info):1!null->rating:0, min(t.title):2!null->movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:6!null), MIN(miidx.info:21!null), MIN(t.title:11!null)\n" + + " ├─ select: MIN(cn.name:20!null), MIN(miidx.info:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ it.id:0!null\n" + - " │ └─ miidx.info_type_id:20!null\n" + - " ├─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ rating (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(it.id:0!null)\n" + - " ├─ right-key: TUPLE(miidx.info_type_id:18!null)\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:6!null\n" + + " │ │ │ │ └─ t.id:0!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ kt.id:11!null\n" + + " │ │ │ └─ t.kind_id:2!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:8!null\n" + + " │ │ └─ t.id:0!null\n" + + " │ └─ Eq\n" + + " │ ├─ miidx.movie_id:3!null\n" + + " │ └─ t.id:0!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ it.id:15!null\n" + + " │ │ │ └─ miidx.info_type_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:6!null\n" + + " │ │ └─ miidx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ miidx.movie_id:3!null\n" + + " │ └─ mc.movie_id:8!null\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:15!null\n" + - " │ │ └─ mc.movie_id:2!null\n" + + " │ │ ├─ it2.id:13!null\n" + + " │ │ └─ mi.info_type_id:7!null\n" + " │ └─ Eq\n" + - " │ ├─ miidx.movie_id:19!null\n" + - " │ └─ mc.movie_id:2!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:8!null\n" + - " │ │ └─ mc.company_type_id:4!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:5!null\n" + - " │ │ │ └─ mc.company_id:3!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ └─ [us] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.kind:1!null\n" + - " │ │ └─ production companies (longtext)\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mc.movie_id:2!null, mc.movie_id:2!null)\n" + - " ├─ right-key: TUPLE(mi.movie_id:5!null, miidx.movie_id:9!null)\n" + - " └─ LookupJoin\n" + - " ├─ Eq\n" + - " │ ├─ miidx.movie_id:19!null\n" + - " │ └─ t.id:10!null\n" + - " ├─ InnerJoin\n" + + " │ ├─ mi.movie_id:6!null\n" + + " │ └─ mc.movie_id:8!null\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.id:19!null\n" + + " │ │ └─ mc.company_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:17!null\n" + + " │ └─ mc.company_type_id:10!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + " │ ├─ Eq\n" + - " │ │ ├─ mi.movie_id:15!null\n" + - " │ │ └─ t.id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.id:13!null\n" + - " │ │ │ └─ t.kind_id:12!null\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ └─ movie (longtext)\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it2.id:17!null\n" + - " │ │ └─ mi.info_type_id:16!null\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it2.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (12,13)\n" + - " │ └─ tableId: 4\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ keys: [mi.movie_id:15!null]\n" + - " ├─ colSet: (26-30)\n" + - " ├─ tableId: 8\n" + - " └─ Table\n" + - " ├─ name: movie_info_idx\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(miidx.info) as rating, min(t.title) as movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(miidx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (it.id = miidx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (it.info = 'rating')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (it.id)\n" + - " ├─ right-key: (miidx.info_type_id)\n" + - " └─ HashJoin\n" + - " ├─ ((mi.movie_id = mc.movie_id) AND (miidx.movie_id = mc.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mc.movie_id, mc.movie_id)\n" + - " ├─ right-key: (mi.movie_id, miidx.movie_id)\n" + - " └─ LookupJoin\n" + - " ├─ (miidx.movie_id = t.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mi.movie_id = t.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it2.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it2.info = 'release dates')\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ columns: [movie_id info_type_id info]\n" + - " └─ keys: mi.movie_id\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = t.id) AND (kt.id = t.kind_id)) AND (mc.movie_id = t.id)) AND (miidx.movie_id = t.id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((it.id = miidx.info_type_id) AND (mi.movie_id = miidx.movie_id)) AND (miidx.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi.info_type_id) AND (mi.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((cn.id = mc.company_id) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'release dates')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'rating')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(miidx.info) as rating, min(t.title) as movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(miidx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (it.id = miidx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (it.info = 'rating')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (it.id)\n" + - " ├─ right-key: (miidx.info_type_id)\n" + - " └─ HashJoin\n" + - " ├─ ((mi.movie_id = mc.movie_id) AND (miidx.movie_id = mc.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mc.movie_id, mc.movie_id)\n" + - " ├─ right-key: (mi.movie_id, miidx.movie_id)\n" + - " └─ LookupJoin\n" + - " ├─ (miidx.movie_id = t.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mi.movie_id = t.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title kind_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it2.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it2.info = 'release dates')\n" + - " │ └─ TableAlias(it2)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ TableAlias(miidx)\n" + - " └─ IndexedTableAccess(movie_info_idx)\n" + - " ├─ index: [movie_info_idx.movie_id]\n" + - " ├─ columns: [movie_id info_type_id info]\n" + - " └─ keys: mi.movie_id\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = t.id) AND (kt.id = t.kind_id)) AND (mc.movie_id = t.id)) AND (miidx.movie_id = t.id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((it.id = miidx.info_type_id) AND (mi.movie_id = miidx.movie_id)) AND (miidx.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(miidx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi.info_type_id) AND (mi.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((cn.id = mc.company_id) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'release dates')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'rating')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -4052,118 +3805,120 @@ WHERE it1.info = 'countries' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi_idx.info):0!null->rating:0, min(t.title):1!null->northern_dark_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi_idx.info:12!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi.movie_id:17!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ kt.id:12!null\n" + + " │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:9!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:6!null\n" + + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt.id:4!null\n" + - " │ │ └─ t.kind_id:2!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:3\n" + - " │ │ │ └─ 2010 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt.kind:1!null\n" + - " │ │ └─ movie (longtext)\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + + " │ └─ mi_idx.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2010 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:15!null\n" + - " │ │ │ └─ mi.info_type_id:18!null\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mi.movie_id:9!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mi.movie_id:17!null\n" + - " │ │ └─ mi_idx.movie_id:10!null\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + " │ └─ Eq\n" + - " │ ├─ mk.movie_id:6!null\n" + - " │ └─ mi.movie_id:17!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.movie_id:6!null\n" + - " │ │ └─ mi_idx.movie_id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:8!null\n" + - " │ │ │ └─ mk.keyword_id:7!null\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:13!null\n" + - " │ │ │ └─ mi_idx.info_type_id:11!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ └─ 8.5 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ countries (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (1,2)\n" + - " │ └─ tableId: 1\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ mi.info:2!null\n" + - " │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " └─ TableAlias(mi)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " │ ├─ k.id:14!null\n" + + " │ └─ mk.keyword_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:16!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.5 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ it1.id:18!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ it1.info:1!null\n" + + " │ └─ countries (longtext)\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " ├─ columns: [id info]\n" + + " ├─ colSet: (1,2)\n" + + " └─ tableId: 1\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as northern_dark_movie]\n" + @@ -4171,129 +3926,125 @@ WHERE it1.info = 'countries' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t.id = mi.movie_id) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt.id = t.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt.kind = 'movie')\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((it1.id = mi.info_type_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '8.5')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " └─ TableAlias(mi)\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + - "", - ExpectedAnalysis: "Project\n" + - " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as northern_dark_movie]\n" + - " └─ GroupBy\n" + - " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + - " ├─ Grouping()\n" + - " └─ InnerJoin\n" + - " ├─ (((t.id = mi.movie_id) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt.id = t.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt.kind = 'movie')\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((it1.id = mi.info_type_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '8.5')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " └─ TableAlias(mi)\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mi_idx.movie_id) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (it1.id = mi.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (it1.info = 'countries')\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + + "", + ExpectedAnalysis: "Project\n" + + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as northern_dark_movie]\n" + + " └─ GroupBy\n" + + " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + + " ├─ Grouping()\n" + + " └─ InnerJoin\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mi_idx.movie_id) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (it1.id = mi.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (it1.info = 'countries')\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", }, { @@ -4343,124 +4094,126 @@ WHERE it1.info = 'countries' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi_idx.info):0!null->rating:0, min(t.title):1!null->western_dark_production:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi_idx.info:12!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi.movie_id:17!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ kt.id:12!null\n" + + " │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:9!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:6!null\n" + + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt.id:4!null\n" + - " │ │ └─ t.kind_id:2!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ └─ 2010 (int)\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ Or\n" + - " │ │ │ │ ├─ t.title LIKE '%murder%'\n" + - " │ │ │ │ └─ t.title LIKE '%Murder%'\n" + - " │ │ │ └─ t.title LIKE '%Mord%'\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt.kind:1!null\n" + - " │ │ └─ movie (longtext)\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + + " │ └─ mi_idx.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThan\n" + + " │ │ │ ├─ t.production_year:3\n" + + " │ │ │ └─ 2010 (int)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ Or\n" + + " │ │ │ ├─ t.title LIKE '%murder%'\n" + + " │ │ │ └─ t.title LIKE '%Murder%'\n" + + " │ │ └─ t.title LIKE '%Mord%'\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:15!null\n" + - " │ │ │ └─ mi.info_type_id:18!null\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mi.movie_id:9!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mi.movie_id:17!null\n" + - " │ │ └─ mi_idx.movie_id:10!null\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + " │ └─ Eq\n" + - " │ ├─ mk.movie_id:6!null\n" + - " │ └─ mi.movie_id:17!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.movie_id:6!null\n" + - " │ │ └─ mi_idx.movie_id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:8!null\n" + - " │ │ │ └─ mk.keyword_id:7!null\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:13!null\n" + - " │ │ │ └─ mi_idx.info_type_id:11!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ └─ 6.0 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ countries (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (1,2)\n" + - " │ └─ tableId: 1\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ mi.info:2!null\n" + - " │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " └─ TableAlias(mi)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " │ ├─ k.id:14!null\n" + + " │ └─ mk.keyword_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:16!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 6.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ it1.id:18!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ it1.info:1!null\n" + + " │ └─ countries (longtext)\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " ├─ columns: [id info]\n" + + " ├─ colSet: (1,2)\n" + + " └─ tableId: 1\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as western_dark_production]\n" + @@ -4468,64 +4221,62 @@ WHERE it1.info = 'countries' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t.id = mi.movie_id) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt.id = t.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year > 2010) AND ((t.title LIKE '%murder%' OR t.title LIKE '%Murder%') OR t.title LIKE '%Mord%'))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt.kind = 'movie')\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((it1.id = mi.info_type_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title'))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info > '6.0')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " └─ TableAlias(mi)\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year > 2010) AND ((t.title LIKE '%murder%' OR t.title LIKE '%Murder%') OR t.title LIKE '%Mord%'))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mi_idx.movie_id) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '6.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (it1.id = mi.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (it1.info = 'countries')\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as western_dark_production]\n" + @@ -4533,64 +4284,62 @@ WHERE it1.info = 'countries' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t.id = mi.movie_id) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt.id = t.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year > 2010) AND ((t.title LIKE '%murder%' OR t.title LIKE '%Murder%') OR t.title LIKE '%Mord%'))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt.kind = 'movie')\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((it1.id = mi.info_type_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title'))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info > '6.0')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " └─ TableAlias(mi)\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year > 2010) AND ((t.title LIKE '%murder%' OR t.title LIKE '%Murder%') OR t.title LIKE '%Mord%'))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mi_idx.movie_id) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '6.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (it1.id = mi.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (it1.info = 'countries')\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", }, { @@ -4641,121 +4390,123 @@ WHERE it1.info = 'countries' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi_idx.info):0!null->rating:0, min(t.title):1!null->north_european_dark_production:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi_idx.info:12!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi.movie_id:17!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ kt.id:12!null\n" + + " │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:9!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:6!null\n" + + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt.id:4!null\n" + - " │ │ └─ t.kind_id:2!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:3\n" + - " │ │ │ └─ 2005 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ kt.kind:1!null\n" + - " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + + " │ └─ mi_idx.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:15!null\n" + - " │ │ │ └─ mi.info_type_id:18!null\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mi.movie_id:9!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mi.movie_id:17!null\n" + - " │ │ └─ mi_idx.movie_id:10!null\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + " │ └─ Eq\n" + - " │ ├─ mk.movie_id:6!null\n" + - " │ └─ mi.movie_id:17!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.movie_id:6!null\n" + - " │ │ └─ mi_idx.movie_id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:8!null\n" + - " │ │ │ └─ mk.keyword_id:7!null\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ k.keyword:1!null IS NULL\n" + - " │ │ │ └─ HashIn\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:13!null\n" + - " │ │ │ └─ mi_idx.info_type_id:11!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ └─ 8.5 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ countries (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (1,2)\n" + - " │ └─ tableId: 1\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ mi.info:2!null\n" + - " │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " └─ TableAlias(mi)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " │ ├─ k.id:14!null\n" + + " │ └─ mk.keyword_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:16!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.5 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ it1.id:18!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ k.keyword:1!null IS NULL\n" + + " │ │ └─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ it1.info:1!null\n" + + " │ └─ countries (longtext)\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " ├─ columns: [id info]\n" + + " ├─ colSet: (1,2)\n" + + " └─ tableId: 1\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as north_european_dark_production]\n" + @@ -4763,64 +4514,62 @@ WHERE it1.info = 'countries' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t.id = mi.movie_id) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt.id = t.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((it1.id = mi.info_type_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(k.keyword IS NULL)) AND (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence')))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '8.5')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " └─ TableAlias(mi)\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mi_idx.movie_id) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (it1.id = mi.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(k.keyword IS NULL)) AND (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence')))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (it1.info = 'countries')\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as north_european_dark_production]\n" + @@ -4828,64 +4577,62 @@ WHERE it1.info = 'countries' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t.id = mi.movie_id) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt.id = t.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ └─ TableAlias(kt)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((it1.id = mi.info_type_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.movie_id = mi_idx.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ TableAlias(mk)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(k.keyword IS NULL)) AND (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence')))\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '8.5')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " └─ TableAlias(mi)\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info_type_id info]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mi_idx.movie_id) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (it1.id = mi.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(k.keyword IS NULL)) AND (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence')))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (it1.info = 'countries')\n" + + " └─ TableAlias(it1)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", }, { @@ -4927,289 +4674,261 @@ WHERE cn.country_code = '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->release_date:0, min(t.title):1!null->internet_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:4!null), MIN(t.title:18!null)\n" + + " ├─ select: MIN(mi.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:17!null\n" + - " │ │ │ │ └─ at.movie_id:1!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ at.movie_id:19!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:17!null\n" + - " │ │ │ └─ mi.movie_id:2!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:5!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:17!null\n" + - " │ │ └─ mk.movie_id:15!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:17!null\n" + - " │ └─ mc.movie_id:8!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:0!null\n" + - " │ │ └─ mk.keyword_id:16!null\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:15!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:8!null\n" + - " │ │ │ │ └─ at.movie_id:1!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ at.movie_id:1!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:15!null\n" + - " │ │ └─ at.movie_id:1!null\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(at.movie_id:1!null, at.movie_id:1!null, at.movie_id:1!null)\n" + - " │ ├─ right-key: TUPLE(mc.movie_id:6!null, mi.movie_id:0!null, mk.movie_id:13!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ mc.movie_id:8!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:6!null\n" + - " │ │ │ │ └─ mi.info_type_id:3!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ │ └─ mi.info LIKE 'USA:% 200%'\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ release dates (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:14!null\n" + - " │ │ │ └─ mc.company_type_id:10!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:12!null\n" + - " │ │ │ │ └─ mc.company_id:9!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ │ │ └─ mc.note LIKE '%(worldwide)%'\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ keys: [mi.movie_id:2!null]\n" + - " │ ├─ colSet: (37-39)\n" + - " │ ├─ tableId: 8\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(at.movie_id:1!null, mi.movie_id:2!null, mk.movie_id:15!null, mc.movie_id:8!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ GreaterThan\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2000 (int)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + - "", - ExpectedEstimates: "Project\n" + - " ├─ columns: [min(mi.info) as release_date, min(t.title) as internet_movie]\n" + - " └─ GroupBy\n" + - " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + - " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (((mc.movie_id = at.movie_id) AND (mi.movie_id = at.movie_id)) AND (mk.movie_id = at.movie_id))\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (at.movie_id, at.movie_id, at.movie_id)\n" + - " │ ├─ right-key: (mc.movie_id, mi.movie_id, mk.movie_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mi.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mc.note LIKE '%(200%)%' AND mc.note LIKE '%(worldwide)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mi.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (at.movie_id, mi.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 2000)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + - "", - ExpectedAnalysis: "Project\n" + - " ├─ columns: [min(mi.info) as release_date, min(t.title) as internet_movie]\n" + - " └─ GroupBy\n" + - " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + - " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (((mc.movie_id = at.movie_id) AND (mi.movie_id = at.movie_id)) AND (mk.movie_id = at.movie_id))\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (at.movie_id, at.movie_id, at.movie_id)\n" + - " │ ├─ right-key: (mc.movie_id, mi.movie_id, mk.movie_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mi.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mc.note LIKE '%(200%)%' AND mc.note LIKE '%(worldwide)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mi.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (at.movie_id, mi.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 2000)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:3!null\n" + + " │ │ │ │ └─ mi.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:3!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ at.movie_id:19!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:13!null\n" + + " │ └─ mk.keyword_id:4!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:5!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:5!null\n" + + " │ │ └─ at.movie_id:19!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:14!null\n" + + " │ └─ mi.info_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mi.note LIKE '%internet%'\n" + + " │ │ └─ mi.info LIKE 'USA:% 200%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:9!null\n" + + " │ │ │ └─ at.movie_id:19!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:17!null\n" + + " │ │ └─ mc.company_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:16!null\n" + + " │ └─ mc.company_type_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mc.note LIKE '%(200%)%'\n" + + " │ │ └─ mc.note LIKE '%(worldwide)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + + "", + ExpectedEstimates: "Project\n" + + " ├─ columns: [min(mi.info) as release_date, min(t.title) as internet_movie]\n" + + " └─ GroupBy\n" + + " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + + " ├─ Grouping()\n" + + " └─ InnerJoin\n" + + " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = at.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = at.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = at.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(200%)%' AND mc.note LIKE '%(worldwide)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + + "", + ExpectedAnalysis: "Project\n" + + " ├─ columns: [min(mi.info) as release_date, min(t.title) as internet_movie]\n" + + " └─ GroupBy\n" + + " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + + " ├─ Grouping()\n" + + " └─ InnerJoin\n" + + " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = at.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = at.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = at.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(200%)%' AND mc.note LIKE '%(worldwide)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + "", }, { @@ -5252,297 +4971,269 @@ WHERE cn.country_code = '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->release_date:0, min(t.title):1!null->youtube_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:4!null), MIN(t.title:19!null)\n" + + " ├─ select: MIN(mi.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:18!null\n" + - " │ │ │ │ └─ at.movie_id:1!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ at.movie_id:20!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:18!null\n" + - " │ │ │ └─ mi.movie_id:2!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:5!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:18!null\n" + - " │ │ └─ mk.movie_id:16!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:18!null\n" + - " │ └─ mc.movie_id:8!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:0!null\n" + - " │ │ └─ mk.keyword_id:17!null\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:16!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:8!null\n" + - " │ │ │ │ └─ at.movie_id:1!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ at.movie_id:1!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:16!null\n" + - " │ │ └─ at.movie_id:1!null\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(at.movie_id:1!null, at.movie_id:1!null, at.movie_id:1!null)\n" + - " │ ├─ right-key: TUPLE(mc.movie_id:6!null, mi.movie_id:0!null, mk.movie_id:14!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ mc.movie_id:8!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:6!null\n" + - " │ │ │ │ └─ mi.info_type_id:3!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ │ └─ mi.info LIKE 'USA:% 200%'\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ release dates (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:15!null\n" + - " │ │ │ └─ mc.company_type_id:10!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:12!null\n" + - " │ │ │ │ └─ mc.company_id:9!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ │ │ └─ mc.note LIKE '%(worldwide)%'\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ └─ YouTube (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ keys: [mi.movie_id:2!null]\n" + - " │ ├─ colSet: (37-39)\n" + - " │ ├─ tableId: 8\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(at.movie_id:1!null, mi.movie_id:2!null, mk.movie_id:16!null, mc.movie_id:8!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2005 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:3!null\n" + + " │ │ │ │ └─ mi.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:3!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ at.movie_id:20!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:13!null\n" + + " │ └─ mk.keyword_id:4!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2005 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2010 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:5!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:5!null\n" + + " │ │ └─ at.movie_id:20!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:14!null\n" + + " │ └─ mi.info_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mi.note LIKE '%internet%'\n" + + " │ │ └─ mi.info LIKE 'USA:% 200%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:9!null\n" + + " │ │ │ └─ at.movie_id:20!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:17!null\n" + + " │ │ └─ mc.company_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:16!null\n" + + " │ └─ mc.company_type_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mc.note LIKE '%(200%)%'\n" + + " │ │ └─ mc.note LIKE '%(worldwide)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ cn.country_code:2\n" + + " │ │ │ └─ [us] (longtext)\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.name:1!null\n" + + " │ │ └─ YouTube (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as release_date, min(t.title) as youtube_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (((mc.movie_id = at.movie_id) AND (mi.movie_id = at.movie_id)) AND (mk.movie_id = at.movie_id))\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (at.movie_id, at.movie_id, at.movie_id)\n" + - " │ ├─ right-key: (mc.movie_id, mi.movie_id, mk.movie_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mi.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mc.note LIKE '%(200%)%' AND mc.note LIKE '%(worldwide)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((cn.country_code = '[us]') AND (cn.name = 'YouTube'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mi.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (at.movie_id, mi.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2005) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2005) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = at.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = at.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = at.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(200%)%' AND mc.note LIKE '%(worldwide)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.country_code = '[us]') AND (cn.name = 'YouTube'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as release_date, min(t.title) as youtube_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (((mc.movie_id = at.movie_id) AND (mi.movie_id = at.movie_id)) AND (mk.movie_id = at.movie_id))\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (at.movie_id, at.movie_id, at.movie_id)\n" + - " │ ├─ right-key: (mc.movie_id, mi.movie_id, mk.movie_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mi.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mc.note LIKE '%(200%)%' AND mc.note LIKE '%(worldwide)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((cn.country_code = '[us]') AND (cn.name = 'YouTube'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mi.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (at.movie_id, mi.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2005) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2005) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = at.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = at.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = at.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(200%)%' AND mc.note LIKE '%(worldwide)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.country_code = '[us]') AND (cn.name = 'YouTube'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + "", }, { @@ -5584,286 +5275,258 @@ WHERE cn.country_code = '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->release_date:0, min(t.title):1!null->modern_american_internet_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:4!null), MIN(t.title:17!null)\n" + + " ├─ select: MIN(mi.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:16!null\n" + - " │ │ │ │ └─ at.movie_id:1!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ at.movie_id:18!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:16!null\n" + - " │ │ │ └─ mi.movie_id:2!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:5!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:16!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:16!null\n" + - " │ └─ mc.movie_id:8!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:0!null\n" + - " │ │ └─ mk.keyword_id:15!null\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:14!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:8!null\n" + - " │ │ │ │ └─ at.movie_id:1!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ at.movie_id:1!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:14!null\n" + - " │ │ └─ at.movie_id:1!null\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(at.movie_id:1!null, at.movie_id:1!null, at.movie_id:1!null)\n" + - " │ ├─ right-key: TUPLE(mc.movie_id:6!null, mi.movie_id:0!null, mk.movie_id:12!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ mc.movie_id:8!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:6!null\n" + - " │ │ │ │ └─ mi.info_type_id:3!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ │ │ └─ NOT\n" + - " │ │ │ │ │ │ └─ mi.info:2!null IS NULL\n" + - " │ │ │ │ │ └─ Or\n" + - " │ │ │ │ │ ├─ mi.info LIKE 'USA:% 199%'\n" + - " │ │ │ │ │ └─ mi.info LIKE 'USA:% 200%'\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ release dates (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:13!null\n" + - " │ │ │ └─ mc.company_type_id:10!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:11!null\n" + - " │ │ │ │ └─ mc.company_id:9!null\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ keys: [mi.movie_id:2!null]\n" + - " │ ├─ colSet: (37-39)\n" + - " │ ├─ tableId: 8\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(at.movie_id:1!null, mi.movie_id:2!null, mk.movie_id:14!null, mc.movie_id:8!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ GreaterThan\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 1990 (int)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1990 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:3!null\n" + + " │ │ │ │ └─ mi.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:3!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ at.movie_id:18!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:12!null\n" + + " │ └─ mk.keyword_id:4!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:5!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:5!null\n" + + " │ │ └─ at.movie_id:18!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:13!null\n" + + " │ └─ mi.info_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ mi.note LIKE '%internet%'\n" + + " │ │ │ └─ NOT\n" + + " │ │ │ └─ mi.info:2!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mi.info LIKE 'USA:% 199%'\n" + + " │ │ └─ mi.info LIKE 'USA:% 200%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:9!null\n" + + " │ │ │ └─ at.movie_id:18!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:16!null\n" + + " │ │ └─ mc.company_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:15!null\n" + + " │ └─ mc.company_type_id:11!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as release_date, min(t.title) as modern_american_internet_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (((mc.movie_id = at.movie_id) AND (mi.movie_id = at.movie_id)) AND (mk.movie_id = at.movie_id))\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (at.movie_id, at.movie_id, at.movie_id)\n" + - " │ ├─ right-key: (mc.movie_id, mi.movie_id, mk.movie_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mi.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mi.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (at.movie_id, mi.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 1990)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = at.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = at.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = at.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as release_date, min(t.title) as modern_american_internet_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (((mc.movie_id = at.movie_id) AND (mi.movie_id = at.movie_id)) AND (mk.movie_id = at.movie_id))\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (at.movie_id, at.movie_id, at.movie_id)\n" + - " │ ├─ right-key: (mc.movie_id, mi.movie_id, mk.movie_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mi.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mi.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (at.movie_id, mi.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 1990)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = at.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = at.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = at.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id]\n" + "", }, { @@ -5902,279 +5565,251 @@ WHERE cn.country_code = '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(at.title):0!null->aka_title:0, min(t.title):1!null->internet_movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(at.title:2!null), MIN(t.title:17!null)\n" + + " ├─ select: MIN(at.title:18!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:16!null\n" + - " │ │ │ │ └─ at.movie_id:1!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ at.movie_id:17!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:16!null\n" + - " │ │ │ └─ mi.movie_id:3!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:5!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:16!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:16!null\n" + + " │ ├─ t.id:0!null\n" + " │ └─ mc.movie_id:8!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:0!null\n" + - " │ │ └─ mk.keyword_id:15!null\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:14!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:8!null\n" + - " │ │ │ │ └─ at.movie_id:1!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:3!null\n" + - " │ │ │ └─ at.movie_id:1!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:14!null\n" + - " │ │ └─ at.movie_id:1!null\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id title]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(at.movie_id:1!null, at.movie_id:1!null, at.movie_id:1!null)\n" + - " │ ├─ right-key: TUPLE(mc.movie_id:5!null, mi.movie_id:0!null, mk.movie_id:11!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mi.movie_id:3!null\n" + - " │ │ │ └─ mc.movie_id:8!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:6!null\n" + - " │ │ │ │ └─ mi.info_type_id:4!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ release dates (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:13!null\n" + - " │ │ │ └─ mc.company_type_id:10!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:11!null\n" + - " │ │ │ │ └─ mc.company_id:9!null\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ keys: [mi.movie_id:3!null]\n" + - " │ ├─ colSet: (37-39)\n" + - " │ ├─ tableId: 8\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(at.movie_id:1!null, mi.movie_id:3!null, mk.movie_id:14!null, mc.movie_id:8!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ GreaterThan\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 1990 (int)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1990 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:3!null\n" + + " │ │ │ │ └─ mi.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:3!null\n" + + " │ │ │ └─ mc.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ at.movie_id:17!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:11!null\n" + + " │ └─ mk.keyword_id:4!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:5!null\n" + + " │ │ │ └─ mc.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:5!null\n" + + " │ │ └─ at.movie_id:17!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:12!null\n" + + " │ └─ mi.info_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ mi.note LIKE '%internet%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id note]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:8!null\n" + + " │ │ │ └─ at.movie_id:17!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:15!null\n" + + " │ │ └─ mc.company_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:14!null\n" + + " │ └─ mc.company_type_id:10!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id title]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(at.title) as aka_title, min(t.title) as internet_movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(at.title), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (((mc.movie_id = at.movie_id) AND (mi.movie_id = at.movie_id)) AND (mk.movie_id = at.movie_id))\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id title]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (at.movie_id, at.movie_id, at.movie_id)\n" + - " │ ├─ right-key: (mc.movie_id, mi.movie_id, mk.movie_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mi.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mi.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (at.movie_id, mi.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 1990)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = at.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = at.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ mi.note LIKE '%internet%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = at.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id title]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(at.title) as aka_title, min(t.title) as internet_movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(at.title), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = at.movie_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (((mc.movie_id = at.movie_id) AND (mi.movie_id = at.movie_id)) AND (mk.movie_id = at.movie_id))\n" + - " │ ├─ TableAlias(at)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_title\n" + - " │ │ └─ columns: [movie_id title]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (at.movie_id, at.movie_id, at.movie_id)\n" + - " │ ├─ right-key: (mc.movie_id, mi.movie_id, mk.movie_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mi.movie_id = mc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(mk)\n" + - " │ └─ IndexedTableAccess(movie_keyword)\n" + - " │ ├─ index: [movie_keyword.movie_id]\n" + - " │ ├─ columns: [movie_id keyword_id]\n" + - " │ └─ keys: mi.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (at.movie_id, mi.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year > 1990)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = at.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = at.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ mi.note LIKE '%internet%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = at.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(at)\n" + + " └─ Table\n" + + " ├─ name: aka_title\n" + + " └─ columns: [movie_id title]\n" + "", }, { @@ -6209,20 +5844,20 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->cool_actor_pseudonym:0, min(t.title):1!null->series_named_after_char:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:13!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:15!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ ├─ ci.movie_id:13!null\n" + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mc.movie_id:8!null\n" + + " │ └─ mc.movie_id:6!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ GreaterThanOrEqual\n" + @@ -6239,11 +5874,11 @@ WHERE cn.country_code ='[us]' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ an.person_id:12!null\n" + + " │ │ ├─ an.person_id:14!null\n" + " │ │ └─ n.id:3!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:3!null\n" + - " │ └─ ci.person_id:10!null\n" + + " │ └─ ci.person_id:12!null\n" + " ├─ TableAlias(n)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + @@ -6251,67 +5886,69 @@ WHERE cn.country_code ='[us]' " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:5!null\n" + + " │ │ │ └─ k.id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:13!null\n" + + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + - " │ ├─ mc.movie_id:8!null\n" + + " │ ├─ mc.movie_id:6!null\n" + " │ └─ mk.movie_id:4!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:5!null\n" + - " │ │ └─ k.id:6!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ character-name-in-title (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:9!null\n" + - " │ └─ cn.id:14!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mc.movie_id:8!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:10!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.company_id:7!null\n" + + " │ │ └─ cn.id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:13!null\n" + + " │ └─ mc.movie_id:6!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:12!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as cool_actor_pseudonym, min(t.title) as series_named_after_char]\n" + @@ -6333,43 +5970,41 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (mc.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as cool_actor_pseudonym, min(t.title) as series_named_after_char]\n" + @@ -6391,43 +6026,41 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (mc.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -6460,20 +6093,20 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->cool_actor_pseudonym:0, min(t.title):1!null->series_named_after_char:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:12!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:10!null\n" + + " │ │ │ ├─ ci.movie_id:12!null\n" + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mc.movie_id:7!null\n" + + " │ └─ mc.movie_id:5!null\n" + " ├─ TableAlias(t)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + @@ -6482,11 +6115,11 @@ WHERE cn.country_code ='[us]' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ an.person_id:11!null\n" + + " │ │ ├─ an.person_id:13!null\n" + " │ │ └─ n.id:2!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:2!null\n" + - " │ └─ ci.person_id:9!null\n" + + " │ └─ ci.person_id:11!null\n" + " ├─ TableAlias(n)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + @@ -6494,67 +6127,69 @@ WHERE cn.country_code ='[us]' " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:4!null\n" + + " │ │ │ └─ k.id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:12!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ mc.movie_id:7!null\n" + + " │ ├─ mc.movie_id:5!null\n" + " │ └─ mk.movie_id:3!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:4!null\n" + - " │ │ └─ k.id:5!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ character-name-in-title (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:8!null\n" + - " │ └─ cn.id:13!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mc.movie_id:7!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:9!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:12!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:11!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as cool_actor_pseudonym, min(t.title) as series_named_after_char]\n" + @@ -6574,43 +6209,41 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (mc.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as cool_actor_pseudonym, min(t.title) as series_named_after_char]\n" + @@ -6630,43 +6263,41 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (mc.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -6700,20 +6331,20 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->cool_actor_pseudonym:0, min(t.title):1!null->series_named_after_char:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:13!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:15!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ ├─ ci.movie_id:13!null\n" + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mc.movie_id:8!null\n" + + " │ └─ mc.movie_id:6!null\n" + " ├─ Filter\n" + " │ ├─ LessThan\n" + " │ │ ├─ t.episode_nr:2\n" + @@ -6726,11 +6357,11 @@ WHERE cn.country_code ='[us]' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ an.person_id:12!null\n" + + " │ │ ├─ an.person_id:14!null\n" + " │ │ └─ n.id:3!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:3!null\n" + - " │ └─ ci.person_id:10!null\n" + + " │ └─ ci.person_id:12!null\n" + " ├─ TableAlias(n)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + @@ -6738,67 +6369,69 @@ WHERE cn.country_code ='[us]' " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:5!null\n" + + " │ │ │ └─ k.id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:13!null\n" + + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + - " │ ├─ mc.movie_id:8!null\n" + + " │ ├─ mc.movie_id:6!null\n" + " │ └─ mk.movie_id:4!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:5!null\n" + - " │ │ └─ k.id:6!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ character-name-in-title (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:9!null\n" + - " │ └─ cn.id:14!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mc.movie_id:8!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:10!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.company_id:7!null\n" + + " │ │ └─ cn.id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:13!null\n" + + " │ └─ mc.movie_id:6!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:12!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as cool_actor_pseudonym, min(t.title) as series_named_after_char]\n" + @@ -6820,43 +6453,41 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (mc.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as cool_actor_pseudonym, min(t.title) as series_named_after_char]\n" + @@ -6878,43 +6509,41 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (mc.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -6949,20 +6578,20 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->cool_actor_pseudonym:0, min(t.title):1!null->series_named_after_char:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:13!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:15!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ ├─ ci.movie_id:13!null\n" + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mc.movie_id:8!null\n" + + " │ └─ mc.movie_id:6!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ GreaterThanOrEqual\n" + @@ -6979,11 +6608,11 @@ WHERE cn.country_code ='[us]' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ an.person_id:12!null\n" + + " │ │ ├─ an.person_id:14!null\n" + " │ │ └─ n.id:3!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:3!null\n" + - " │ └─ ci.person_id:10!null\n" + + " │ └─ ci.person_id:12!null\n" + " ├─ TableAlias(n)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + @@ -6991,67 +6620,69 @@ WHERE cn.country_code ='[us]' " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:5!null\n" + + " │ │ │ └─ k.id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:13!null\n" + + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + - " │ ├─ mc.movie_id:8!null\n" + + " │ ├─ mc.movie_id:6!null\n" + " │ └─ mk.movie_id:4!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:5!null\n" + - " │ │ └─ k.id:6!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ character-name-in-title (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:9!null\n" + - " │ └─ cn.id:14!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mc.movie_id:8!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:10!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.company_id:7!null\n" + + " │ │ └─ cn.id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:13!null\n" + + " │ └─ mc.movie_id:6!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:12!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as cool_actor_pseudonym, min(t.title) as series_named_after_char]\n" + @@ -7073,43 +6704,41 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (mc.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as cool_actor_pseudonym, min(t.title) as series_named_after_char]\n" + @@ -7131,43 +6760,41 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (mc.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -7198,232 +6825,197 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->member_in_charnamed_american_movie:0, min(n.name):0!null->a1:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:11!null)\n" + + " ├─ select: MIN(n.name:2!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:9!null\n" + - " │ │ │ └─ t.id:12!null\n" + + " │ │ │ ├─ ci.movie_id:12!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:12!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:12!null\n" + - " │ └─ mc.movie_id:6!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:10!null\n" + - " │ │ └─ ci.person_id:8!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mk.keyword_id:5!null\n" + - " │ │ │ └─ k.id:0!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ character-name-in-title (longtext)\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:7!null\n" + - " │ │ │ └─ cn.id:2!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:6!null\n" + - " │ │ │ │ └─ mk.movie_id:4!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:6!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:8!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ ├─ n.name:1!null\n" + - " │ │ │ └─ B (longtext)\n" + - " │ │ └─ LessThanOrEqual\n" + - " │ │ ├─ n.name:1!null\n" + - " │ │ └─ Bÿ (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ci.movie_id:9!null, mk.movie_id:4!null, mc.movie_id:6!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:1!null\n" + + " │ └─ ci.person_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ n.name:1!null\n" + + " │ │ │ └─ B (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ n.name:1!null\n" + + " │ │ └─ Bÿ (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:4!null\n" + + " │ │ │ └─ k.id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:12!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:5!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:12!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_american_movie, min(n.name) as a1]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((n.name >= 'B') AND (n.name <= 'Bÿ'))\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((n.name >= 'B') AND (n.name <= 'Bÿ'))\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_american_movie, min(n.name) as a1]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((n.name >= 'B') AND (n.name <= 'Bÿ'))\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((n.name >= 'B') AND (n.name <= 'Bÿ'))\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -7453,229 +7045,194 @@ WHERE k.keyword ='character-name-in-title' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->member_in_charnamed_movie:0, min(n.name):0!null->a1:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:10!null)\n" + + " ├─ select: MIN(n.name:2!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:8!null\n" + - " │ │ │ └─ t.id:11!null\n" + + " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:11!null\n" + + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:11!null\n" + + " │ ├─ t.id:0!null\n" + " │ └─ mc.movie_id:5!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:9!null\n" + - " │ │ └─ ci.person_id:7!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mk.keyword_id:4!null\n" + - " │ │ │ └─ k.id:0!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ character-name-in-title (longtext)\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:2!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:6!null\n" + - " │ │ │ └─ cn.id:2!null\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:5!null\n" + - " │ │ │ │ └─ mk.movie_id:3!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:5!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:7!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ ├─ n.name:1!null\n" + - " │ │ │ └─ Z (longtext)\n" + - " │ │ └─ LessThanOrEqual\n" + - " │ │ ├─ n.name:1!null\n" + - " │ │ └─ Zÿ (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ci.movie_id:8!null, mk.movie_id:3!null, mc.movie_id:5!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:1!null\n" + + " │ └─ ci.person_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ n.name:1!null\n" + + " │ │ │ └─ Z (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ n.name:1!null\n" + + " │ │ └─ Zÿ (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:4!null\n" + + " │ │ │ └─ k.id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:11!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:5!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:11!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_movie, min(n.name) as a1]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((n.name >= 'Z') AND (n.name <= 'Zÿ'))\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((n.name >= 'Z') AND (n.name <= 'Zÿ'))\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_movie, min(n.name) as a1]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((n.name >= 'Z') AND (n.name <= 'Zÿ'))\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + - "", - }, - { - Query: ` -SELECT MIN(n.name) AS member_in_charnamed_movie, + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((n.name >= 'Z') AND (n.name <= 'Zÿ'))\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + + "", + }, + { + Query: ` +SELECT MIN(n.name) AS member_in_charnamed_movie, MIN(n.name) AS a1 FROM cast_info AS ci, company_name AS cn, @@ -7700,224 +7257,189 @@ WHERE k.keyword ='character-name-in-title' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->member_in_charnamed_movie:0, min(n.name):0!null->a1:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:10!null)\n" + + " ├─ select: MIN(n.name:2!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:8!null\n" + - " │ │ │ └─ t.id:11!null\n" + + " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:11!null\n" + + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:11!null\n" + + " │ ├─ t.id:0!null\n" + " │ └─ mc.movie_id:5!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:9!null\n" + - " │ │ └─ ci.person_id:7!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mk.keyword_id:4!null\n" + - " │ │ │ └─ k.id:0!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ character-name-in-title (longtext)\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:2!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:6!null\n" + - " │ │ │ └─ cn.id:2!null\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:5!null\n" + - " │ │ │ │ └─ mk.movie_id:3!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:5!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:7!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ ├─ n.name:1!null\n" + - " │ │ │ └─ X (longtext)\n" + - " │ │ └─ LessThanOrEqual\n" + - " │ │ ├─ n.name:1!null\n" + - " │ │ └─ Xÿ (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ci.movie_id:8!null, mk.movie_id:3!null, mc.movie_id:5!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:1!null\n" + + " │ └─ ci.person_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ n.name:1!null\n" + + " │ │ │ └─ X (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ n.name:1!null\n" + + " │ │ └─ Xÿ (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:4!null\n" + + " │ │ │ └─ k.id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:11!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:5!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:11!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_movie, min(n.name) as a1]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((n.name >= 'X') AND (n.name <= 'Xÿ'))\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((n.name >= 'X') AND (n.name <= 'Xÿ'))\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_movie, min(n.name) as a1]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((n.name >= 'X') AND (n.name <= 'Xÿ'))\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((n.name >= 'X') AND (n.name <= 'Xÿ'))\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -7946,218 +7468,183 @@ WHERE k.keyword ='character-name-in-title' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->member_in_charnamed_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:10!null)\n" + + " ├─ select: MIN(n.name:2!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:8!null\n" + - " │ │ │ └─ t.id:11!null\n" + + " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:11!null\n" + + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:11!null\n" + + " │ ├─ t.id:0!null\n" + " │ └─ mc.movie_id:5!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:9!null\n" + - " │ │ └─ ci.person_id:7!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mk.keyword_id:4!null\n" + - " │ │ │ └─ k.id:0!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ character-name-in-title (longtext)\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:2!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:6!null\n" + - " │ │ │ └─ cn.id:2!null\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:5!null\n" + - " │ │ │ │ └─ mk.movie_id:3!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:5!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:7!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ n.name LIKE '%Bert%'\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ci.movie_id:8!null, mk.movie_id:3!null, mc.movie_id:5!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:1!null\n" + + " │ └─ ci.person_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ n.name LIKE '%Bert%'\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:4!null\n" + + " │ │ │ └─ k.id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:11!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:5!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:11!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ n.name LIKE '%Bert%'\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ n.name LIKE '%Bert%'\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ n.name LIKE '%Bert%'\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ n.name LIKE '%Bert%'\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -8186,222 +7673,187 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->member_in_charnamed_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:11!null)\n" + + " ├─ select: MIN(n.name:2!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:9!null\n" + - " │ │ │ └─ t.id:12!null\n" + + " │ │ │ ├─ ci.movie_id:12!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:12!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:12!null\n" + - " │ └─ mc.movie_id:6!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:10!null\n" + - " │ │ └─ ci.person_id:8!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mk.keyword_id:5!null\n" + - " │ │ │ └─ k.id:0!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ character-name-in-title (longtext)\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:7!null\n" + - " │ │ │ └─ cn.id:2!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:6!null\n" + - " │ │ │ │ └─ mk.movie_id:4!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:6!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:8!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ci.movie_id:9!null, mk.movie_id:4!null, mc.movie_id:6!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + - "", - ExpectedEstimates: "Project\n" + - " ├─ columns: [min(n.name) as member_in_charnamed_movie]\n" + - " └─ GroupBy\n" + - " ├─ SelectedExprs(MIN(n.name))\n" + - " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + - "", - ExpectedAnalysis: "Project\n" + - " ├─ columns: [min(n.name) as member_in_charnamed_movie]\n" + - " └─ GroupBy\n" + - " ├─ SelectedExprs(MIN(n.name))\n" + - " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id country_code]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + - "", - }, + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:1!null\n" + + " │ └─ ci.person_id:11!null\n" + + " ├─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:4!null\n" + + " │ │ │ └─ k.id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:12!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:5!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:12!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + + "", + ExpectedEstimates: "Project\n" + + " ├─ columns: [min(n.name) as member_in_charnamed_movie]\n" + + " └─ GroupBy\n" + + " ├─ SelectedExprs(MIN(n.name))\n" + + " ├─ Grouping()\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + + "", + ExpectedAnalysis: "Project\n" + + " ├─ columns: [min(n.name) as member_in_charnamed_movie]\n" + + " └─ GroupBy\n" + + " ├─ SelectedExprs(MIN(n.name))\n" + + " ├─ Grouping()\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + + "", + }, { Query: ` SELECT MIN(n.name) AS member_in_charnamed_movie @@ -8428,218 +7880,183 @@ WHERE k.keyword ='character-name-in-title' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->member_in_charnamed_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:10!null)\n" + + " ├─ select: MIN(n.name:2!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:8!null\n" + - " │ │ │ └─ t.id:11!null\n" + + " │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ └─ t.id:0!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:11!null\n" + + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mk.movie_id:3!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:11!null\n" + + " │ ├─ t.id:0!null\n" + " │ └─ mc.movie_id:5!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:9!null\n" + - " │ │ └─ ci.person_id:7!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mk.keyword_id:4!null\n" + - " │ │ │ └─ k.id:0!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ character-name-in-title (longtext)\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:2!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:6!null\n" + - " │ │ │ └─ cn.id:2!null\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:5!null\n" + - " │ │ │ │ └─ mk.movie_id:3!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:5!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:7!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ n.name LIKE '%B%'\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ci.movie_id:8!null, mk.movie_id:3!null, mc.movie_id:5!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:1!null\n" + + " │ └─ ci.person_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ n.name LIKE '%B%'\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:4!null\n" + + " │ │ │ └─ k.id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ci.movie_id:11!null\n" + + " │ │ └─ mk.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:5!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:11!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ n.name LIKE '%B%'\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ n.name LIKE '%B%'\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as member_in_charnamed_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((ci.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (mk.keyword_id = k.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mc.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ n.name LIKE '%B%'\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ n.name LIKE '%B%'\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (ci.movie_id = mk.movie_id)) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -8674,239 +8091,204 @@ WHERE ci.note IN ('(producer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(t.title):2!null->movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:9!null), MIN(mi_idx.info:6!null), MIN(t.title:17!null)\n" + + " ├─ select: MIN(mi.info:10!null), MIN(mi_idx.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:16!null\n" + - " │ │ │ └─ mi.movie_id:7!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:8!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:16!null\n" + - " │ │ └─ mi_idx.movie_id:4!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:16!null\n" + - " │ └─ ci.movie_id:11!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:13!null\n" + - " │ │ └─ ci.person_id:10!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:5!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ votes (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:2!null\n" + - " │ │ │ └─ mi.info_type_id:8!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ budget (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (8,9)\n" + - " │ │ │ └─ tableId: 2\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it1.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.info_type_id:4!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:7!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:4!null\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((producer) (longtext), (executive producer) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:7!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:10!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.gender:2\n" + - " │ │ │ └─ m (longtext)\n" + - " │ │ └─ n.name LIKE '%Tim%'\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:7!null, mi_idx.movie_id:4!null, ci.movie_id:11!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ ci.movie_id:16!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:2!null\n" + + " │ └─ ci.person_id:15!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ n.gender:2\n" + + " │ │ │ └─ m (longtext)\n" + + " │ │ └─ n.name LIKE '%Tim%'\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:16!null\n" + + " │ │ │ └─ mi_idx.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:8!null\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:11!null\n" + + " │ └─ mi_idx.info_type_id:6!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:16!null\n" + + " │ │ └─ mi.movie_id:8!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:13!null\n" + + " │ └─ mi.info_type_id:9!null\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ budget (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (8,9)\n" + + " │ └─ tableId: 2\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((producer) (longtext), (executive producer) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(t.title) as movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'budget')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(producer)', '(executive producer)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((n.gender = 'm') AND n.name LIKE '%Tim%')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((n.gender = 'm') AND n.name LIKE '%Tim%')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'budget')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(producer)', '(executive producer)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(t.title) as movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'budget')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(producer)', '(executive producer)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((n.gender = 'm') AND n.name LIKE '%Tim%')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((n.gender = 'm') AND n.name LIKE '%Tim%')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'budget')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(producer)', '(executive producer)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -8949,270 +8331,235 @@ WHERE ci.note IN ('(writer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(t.title):2!null->movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:9!null), MIN(mi_idx.info:6!null), MIN(t.title:17!null)\n" + + " ├─ select: MIN(mi.info:10!null), MIN(mi_idx.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:16!null\n" + - " │ │ │ └─ mi.movie_id:7!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi.movie_id:8!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:16!null\n" + - " │ │ └─ mi_idx.movie_id:4!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:16!null\n" + - " │ └─ ci.movie_id:12!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:14!null\n" + - " │ │ └─ ci.person_id:11!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:5!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ rating (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:2!null\n" + - " │ │ │ └─ mi.info_type_id:8!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ genres (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (8,9)\n" + - " │ │ │ └─ tableId: 2\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it1.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.info_type_id:4!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:7!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:4!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ │ └─ 8.0 (longtext)\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + - " │ │ │ │ └─ mi.note:3 IS NULL\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:7!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:11!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ NOT\n" + - " │ │ │ └─ n.gender:1 IS NULL\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ n.gender:1\n" + - " │ │ └─ f (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:7!null, mi_idx.movie_id:4!null, ci.movie_id:12!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ ci.movie_id:17!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2008 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2014 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:3!null\n" + + " │ └─ ci.person_id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ n.gender:1 IS NULL\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ n.gender:1\n" + + " │ │ └─ f (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id gender]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2008 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2014 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:17!null\n" + + " │ │ │ └─ mi_idx.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:8!null\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:12!null\n" + + " │ └─ mi_idx.info_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:17!null\n" + + " │ │ └─ mi.movie_id:8!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:14!null\n" + + " │ └─ mi.info_type_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ mi.info:2!null\n" + + " │ │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + + " │ │ └─ mi.note:3 IS NULL\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (8,9)\n" + + " │ └─ tableId: 2\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(t.title) as movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '8.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((mi.info HASH IN ('Horror', 'Thriller')) AND mi.note IS NULL)\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((NOT(n.gender IS NULL)) AND (n.gender = 'f'))\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2008) AND (t.production_year <= 2014))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2008) AND (t.production_year <= 2014))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(n.gender IS NULL)) AND (n.gender = 'f'))\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '8.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mi.info HASH IN ('Horror', 'Thriller')) AND mi.note IS NULL)\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(t.title) as movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '8.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ ((mi.info HASH IN ('Horror', 'Thriller')) AND mi.note IS NULL)\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ ((NOT(n.gender IS NULL)) AND (n.gender = 'f'))\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2008) AND (t.production_year <= 2014))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2008) AND (t.production_year <= 2014))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(n.gender IS NULL)) AND (n.gender = 'f'))\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '8.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mi.info HASH IN ('Horror', 'Thriller')) AND mi.note IS NULL)\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -9255,245 +8602,210 @@ WHERE ci.note IN ('(writer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(t.title):2!null->movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:9!null), MIN(mi_idx.info:6!null), MIN(t.title:16!null)\n" + + " ├─ select: MIN(mi.info:9!null), MIN(mi_idx.info:6!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:15!null\n" + + " │ │ │ ├─ t.id:0!null\n" + " │ │ │ └─ mi.movie_id:7!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:15!null\n" + + " │ │ ├─ t.id:0!null\n" + " │ │ └─ mi_idx.movie_id:4!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:15!null\n" + - " │ └─ ci.movie_id:11!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:13!null\n" + - " │ │ └─ ci.person_id:10!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:5!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ votes (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:2!null\n" + - " │ │ │ └─ mi.info_type_id:8!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ genres (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (8,9)\n" + - " │ │ │ └─ tableId: 2\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it1.id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.info_type_id:4!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:7!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:4!null\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ └─ TUPLE(Horror (longtext), Action (longtext), Sci-Fi (longtext), Thriller (longtext), Crime (longtext), War (longtext))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:7!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:10!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.gender:1\n" + - " │ │ └─ m (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:7!null, mi_idx.movie_id:4!null, ci.movie_id:11!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ ci.movie_id:15!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:2!null\n" + + " │ └─ ci.person_id:14!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:1\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id gender]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:15!null\n" + + " │ │ │ └─ mi_idx.movie_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:7!null\n" + + " │ │ └─ mi_idx.movie_id:4!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:10!null\n" + + " │ └─ mi_idx.info_type_id:5!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:15!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:12!null\n" + + " │ └─ mi.info_type_id:8!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Horror (longtext), Action (longtext), Sci-Fi (longtext), Thriller (longtext), Crime (longtext), War (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (8,9)\n" + + " │ └─ tableId: 2\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(t.title) as movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(t.title) as movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -9554,10 +8866,10 @@ WHERE ci.note IN ('(voice)', " │ │ │ └─ mi.movie_id:8!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:13!null\n" + + " │ │ └─ mc.movie_id:11!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ ci.movie_id:17!null\n" + + " │ └─ ci.movie_id:19!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ GreaterThanOrEqual\n" + @@ -9574,7 +8886,7 @@ WHERE ci.note IN ('(voice)', " └─ InnerJoin\n" + " ├─ Eq\n" + " │ ├─ rt.id:3!null\n" + - " │ └─ ci.role_id:20!null\n" + + " │ └─ ci.role_id:22!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.role:1!null\n" + @@ -9588,10 +8900,10 @@ WHERE ci.note IN ('(voice)', " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:5!null\n" + - " │ │ └─ ci.person_id:16!null\n" + + " │ │ └─ ci.person_id:18!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:5!null\n" + - " │ └─ an.person_id:22!null\n" + + " │ └─ an.person_id:24!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + @@ -9605,94 +8917,96 @@ WHERE ci.note IN ('(voice)', " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:13!null\n" + - " │ │ └─ mi.movie_id:8!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:11!null\n" + + " │ │ │ └─ mi.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:8!null\n" + + " │ │ └─ ci.movie_id:19!null\n" + " │ └─ Eq\n" + - " │ ├─ mi.movie_id:8!null\n" + - " │ └─ ci.movie_id:17!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:11!null\n" + - " │ │ └─ mi.info_type_id:9!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ mi.info:2!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mi.info LIKE 'Japan:%200%'\n" + - " │ │ │ └─ mi.info LIKE 'USA:%200%'\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " │ ├─ it.id:14!null\n" + + " │ └─ mi.info_type_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mi.info:2!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mi.info LIKE 'Japan:%200%'\n" + + " │ │ └─ mi.info LIKE 'USA:%200%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ cn.id:23!null\n" + - " │ └─ mc.company_id:14!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:13!null\n" + - " │ │ └─ ci.movie_id:17!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ mc.note:2 IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ └─ mc.note LIKE '%(worldwide)%'\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:21!null\n" + - " │ │ │ └─ ci.person_role_id:18\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:16!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.movie_id:11!null\n" + + " │ │ └─ ci.movie_id:19!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:16!null\n" + + " │ └─ mc.company_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note:2 IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(worldwide)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:23!null\n" + + " │ │ └─ ci.person_role_id:20\n" + + " │ ├─ Filter\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:18!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as voicing_actress, min(t.title) as voiced_movie]\n" + @@ -9724,55 +9038,53 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mc.note IS NULL)) AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note IS NULL)) AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as voicing_actress, min(t.title) as voiced_movie]\n" + @@ -9804,55 +9116,53 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mc.note IS NULL)) AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note IS NULL)) AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -9911,10 +9221,10 @@ WHERE ci.note = '(voice)' " │ │ │ └─ mi.movie_id:8!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:13!null\n" + + " │ │ └─ mc.movie_id:11!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ ci.movie_id:17!null\n" + + " │ └─ ci.movie_id:19!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + @@ -9933,7 +9243,7 @@ WHERE ci.note = '(voice)' " └─ InnerJoin\n" + " ├─ Eq\n" + " │ ├─ rt.id:3!null\n" + - " │ └─ ci.role_id:20!null\n" + + " │ └─ ci.role_id:22!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.role:1!null\n" + @@ -9947,10 +9257,10 @@ WHERE ci.note = '(voice)' " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:5!null\n" + - " │ │ └─ ci.person_id:16!null\n" + + " │ │ └─ ci.person_id:18!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:5!null\n" + - " │ └─ an.person_id:22!null\n" + + " │ └─ an.person_id:24!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + @@ -9964,93 +9274,95 @@ WHERE ci.note = '(voice)' " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:13!null\n" + - " │ │ └─ mi.movie_id:8!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:11!null\n" + + " │ │ │ └─ mi.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:8!null\n" + + " │ │ └─ ci.movie_id:19!null\n" + " │ └─ Eq\n" + - " │ ├─ mi.movie_id:8!null\n" + - " │ └─ ci.movie_id:17!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:11!null\n" + - " │ │ └─ mi.info_type_id:9!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ mi.info:2!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mi.info LIKE 'Japan:%2007%'\n" + - " │ │ │ └─ mi.info LIKE 'USA:%2008%'\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " │ ├─ it.id:14!null\n" + + " │ └─ mi.info_type_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mi.info:2!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mi.info LIKE 'Japan:%2007%'\n" + + " │ │ └─ mi.info LIKE 'USA:%2008%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ cn.id:23!null\n" + - " │ └─ mc.company_id:14!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:13!null\n" + - " │ │ └─ ci.movie_id:17!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ └─ mc.note LIKE '%(worldwide)%'\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:21!null\n" + - " │ │ │ └─ ci.person_role_id:18\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ (voice) (longtext)\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:16!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.movie_id:11!null\n" + + " │ │ └─ ci.movie_id:19!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:16!null\n" + + " │ └─ mc.company_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mc.note LIKE '%(200%)%'\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(worldwide)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:23!null\n" + + " │ │ └─ ci.person_role_id:20\n" + + " │ ├─ Filter\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ (voice) (longtext)\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:18!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as voicing_actress, min(t.title) as kung_fu_panda]\n" + @@ -10082,55 +9394,53 @@ WHERE ci.note = '(voice)' " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%2007%' OR mi.info LIKE 'USA:%2008%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%2007%' OR mi.info LIKE 'USA:%2008%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mc.note LIKE '%(200%)%' AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note = '(voice)')\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(200%)%' AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note = '(voice)')\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as voicing_actress, min(t.title) as kung_fu_panda]\n" + @@ -10162,55 +9472,53 @@ WHERE ci.note = '(voice)' " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%2007%' OR mi.info LIKE 'USA:%2008%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%2007%' OR mi.info LIKE 'USA:%2008%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mc.note LIKE '%(200%)%' AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note = '(voice)')\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(200%)%' AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note = '(voice)')\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -10268,10 +9576,10 @@ WHERE ci.note IN ('(voice)', " │ │ │ └─ mi.movie_id:8!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:13!null\n" + + " │ │ └─ mc.movie_id:11!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ ci.movie_id:16!null\n" + + " │ └─ ci.movie_id:18!null\n" + " ├─ Filter\n" + " │ ├─ GreaterThan\n" + " │ │ ├─ t.production_year:2\n" + @@ -10284,7 +9592,7 @@ WHERE ci.note IN ('(voice)', " └─ InnerJoin\n" + " ├─ Eq\n" + " │ ├─ rt.id:3!null\n" + - " │ └─ ci.role_id:19!null\n" + + " │ └─ ci.role_id:21!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.role:1!null\n" + @@ -10298,10 +9606,10 @@ WHERE ci.note IN ('(voice)', " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:5!null\n" + - " │ │ └─ ci.person_id:15!null\n" + + " │ │ └─ ci.person_id:17!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:5!null\n" + - " │ └─ an.person_id:21!null\n" + + " │ └─ an.person_id:23!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + @@ -10315,87 +9623,89 @@ WHERE ci.note IN ('(voice)', " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:13!null\n" + - " │ │ └─ mi.movie_id:8!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:11!null\n" + + " │ │ │ └─ mi.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:8!null\n" + + " │ │ └─ ci.movie_id:18!null\n" + " │ └─ Eq\n" + - " │ ├─ mi.movie_id:8!null\n" + - " │ └─ ci.movie_id:16!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:11!null\n" + - " │ │ └─ mi.info_type_id:9!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ mi.info:2!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mi.info LIKE 'Japan:%200%'\n" + - " │ │ │ └─ mi.info LIKE 'USA:%200%'\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " │ ├─ it.id:13!null\n" + + " │ └─ mi.info_type_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mi.info:2!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mi.info LIKE 'Japan:%200%'\n" + + " │ │ └─ mi.info LIKE 'USA:%200%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ cn.id:22!null\n" + - " │ └─ mc.company_id:14!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:13!null\n" + - " │ │ └─ ci.movie_id:16!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:20!null\n" + - " │ │ │ └─ ci.person_role_id:17\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:15!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.movie_id:11!null\n" + + " │ │ └─ ci.movie_id:18!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:15!null\n" + + " │ └─ mc.company_id:12!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:22!null\n" + + " │ │ └─ ci.person_role_id:19\n" + + " │ ├─ Filter\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:17!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as voicing_actress, min(t.title) as jap_engl_voiced_movie]\n" + @@ -10427,53 +9737,51 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as voicing_actress, min(t.title) as jap_engl_voiced_movie]\n" + @@ -10505,53 +9813,51 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -10605,10 +9911,10 @@ WHERE ci.note IN ('(voice)', " │ │ │ └─ mi.movie_id:8!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:12!null\n" + + " │ │ └─ mc.movie_id:10!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ ci.movie_id:15!null\n" + + " │ └─ ci.movie_id:17!null\n" + " ├─ Filter\n" + " │ ├─ GreaterThan\n" + " │ │ ├─ t.production_year:2\n" + @@ -10621,7 +9927,7 @@ WHERE ci.note IN ('(voice)', " └─ InnerJoin\n" + " ├─ Eq\n" + " │ ├─ rt.id:3!null\n" + - " │ └─ ci.role_id:18!null\n" + + " │ └─ ci.role_id:20!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.role:1!null\n" + @@ -10635,10 +9941,10 @@ WHERE ci.note IN ('(voice)', " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:5!null\n" + - " │ │ └─ ci.person_id:14!null\n" + + " │ │ └─ ci.person_id:16!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:5!null\n" + - " │ └─ an.person_id:20!null\n" + + " │ └─ an.person_id:22!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + " │ │ ├─ n.gender:2\n" + @@ -10650,80 +9956,82 @@ WHERE ci.note IN ('(voice)', " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:12!null\n" + - " │ │ └─ mi.movie_id:8!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:10!null\n" + + " │ │ │ └─ mi.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:8!null\n" + + " │ │ └─ ci.movie_id:17!null\n" + " │ └─ Eq\n" + - " │ ├─ mi.movie_id:8!null\n" + - " │ └─ ci.movie_id:15!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:10!null\n" + - " │ │ └─ mi.info_type_id:9!null\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " │ ├─ it.id:12!null\n" + + " │ └─ mi.info_type_id:9!null\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ cn.id:21!null\n" + - " │ └─ mc.company_id:13!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:12!null\n" + - " │ │ └─ ci.movie_id:15!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:19!null\n" + - " │ │ │ └─ ci.person_role_id:16\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:14!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.movie_id:10!null\n" + + " │ │ └─ ci.movie_id:17!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:14!null\n" + + " │ └─ mc.company_id:11!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:21!null\n" + + " │ │ └─ ci.person_role_id:18\n" + + " │ ├─ Filter\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:16!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as voicing_actress, min(t.title) as jap_engl_voiced_movie]\n" + @@ -10755,51 +10063,49 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as voicing_actress, min(t.title) as jap_engl_voiced_movie]\n" + @@ -10831,51 +10137,49 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -10903,69 +10207,69 @@ WHERE ct.kind = 'production companies' ExpectedPlan: "Project\n" + " ├─ columns: [min(mc.note):0!null->production_note:0, min(t.title):2!null->movie_title:0, min(t.production_year):1!null->movie_year:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mc.note:5), MIN(t.production_year:2), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mc.note:7), MIN(t.production_year:2), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:10!null\n" + - " │ │ │ └─ mc.company_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:3!null\n" + - " │ │ └─ mi_idx.movie_id:6!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ NOT\n" + - " │ │ │ └─ mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'\n" + - " │ │ └─ Or\n" + - " │ │ ├─ mc.note LIKE '%(co-production)%'\n" + - " │ │ └─ mc.note LIKE '%(presents)%'\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mc.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mi_idx.movie_id:3!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ it.id:8!null\n" + - " │ │ └─ mi_idx.info_type_id:7!null\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ top 250 rank (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + + " │ │ ├─ mc.movie_id:5!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ it.id:8!null\n" + + " │ └─ mi_idx.info_type_id:4!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ct.kind:1!null\n" + - " │ └─ production companies (longtext)\n" + - " └─ TableAlias(ct)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ ct.id:10!null\n" + + " │ └─ mc.company_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mc.note LIKE '%(co-production)%'\n" + + " │ │ └─ mc.note LIKE '%(presents)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ top 250 rank (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ ct.kind:1!null\n" + + " │ └─ production companies (longtext)\n" + + " └─ TableAlias(ct)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mc.note) as production_note, min(t.title) as movie_title, min(t.production_year) as movie_year]\n" + @@ -10973,38 +10277,38 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(mc.note), MIN(t.production_year), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ ((NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%')) AND (mc.note LIKE '%(co-production)%' OR mc.note LIKE '%(presents)%'))\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi_idx.info_type_id)\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'top 250 rank')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = mi_idx.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi_idx.movie_id) AND (it.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%')) AND (mc.note LIKE '%(co-production)%' OR mc.note LIKE '%(presents)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'top 250 rank')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mc.note) as production_note, min(t.title) as movie_title, min(t.production_year) as movie_year]\n" + @@ -11012,38 +10316,38 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(mc.note), MIN(t.production_year), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ ((NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%')) AND (mc.note LIKE '%(co-production)%' OR mc.note LIKE '%(presents)%'))\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi_idx.info_type_id)\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'top 250 rank')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = mi_idx.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi_idx.movie_id) AND (it.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%')) AND (mc.note LIKE '%(co-production)%' OR mc.note LIKE '%(presents)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'top 250 rank')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", }, { @@ -11070,73 +10374,73 @@ WHERE ct.kind = 'production companies' ExpectedPlan: "Project\n" + " ├─ columns: [min(mc.note):0!null->production_note:0, min(t.title):2!null->movie_title:0, min(t.production_year):1!null->movie_year:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mc.note:5), MIN(t.production_year:2), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mc.note:7), MIN(t.production_year:2), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:10!null\n" + - " │ │ │ └─ mc.company_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:3!null\n" + - " │ │ └─ mi_idx.movie_id:6!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ ├─ t.production_year:2\n" + - " │ │ │ │ └─ 2005 (smallint)\n" + - " │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (smallint)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ NOT\n" + - " │ │ └─ mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mc.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mi_idx.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2005 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ it.id:8!null\n" + - " │ │ └─ mi_idx.info_type_id:7!null\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ bottom 10 rank (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + + " │ │ ├─ mc.movie_id:5!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ it.id:8!null\n" + + " │ └─ mi_idx.info_type_id:4!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ct.kind:1!null\n" + - " │ └─ production companies (longtext)\n" + - " └─ TableAlias(ct)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ ct.id:10!null\n" + + " │ └─ mc.company_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ bottom 10 rank (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ ct.kind:1!null\n" + + " │ └─ production companies (longtext)\n" + + " └─ TableAlias(ct)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mc.note) as production_note, min(t.title) as movie_title, min(t.production_year) as movie_year]\n" + @@ -11144,40 +10448,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(mc.note), MIN(t.production_year), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year >= 2005) AND (t.production_year <= 2010))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'))\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi_idx.info_type_id)\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'bottom 10 rank')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2005) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi_idx.movie_id) AND (it.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'bottom 10 rank')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mc.note) as production_note, min(t.title) as movie_title, min(t.production_year) as movie_year]\n" + @@ -11185,40 +10489,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(mc.note), MIN(t.production_year), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year >= 2005) AND (t.production_year <= 2010))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'))\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi_idx.info_type_id)\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'bottom 10 rank')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2005) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi_idx.movie_id) AND (it.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'bottom 10 rank')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", }, { @@ -11246,71 +10550,71 @@ WHERE ct.kind = 'production companies' ExpectedPlan: "Project\n" + " ├─ columns: [min(mc.note):0!null->production_note:0, min(t.title):2!null->movie_title:0, min(t.production_year):1!null->movie_year:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mc.note:5), MIN(t.production_year:2), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mc.note:7), MIN(t.production_year:2), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:10!null\n" + - " │ │ │ └─ mc.company_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:3!null\n" + - " │ │ └─ mi_idx.movie_id:6!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ NOT\n" + - " │ │ │ └─ mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'\n" + - " │ │ └─ mc.note LIKE '%(co-production)%'\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mc.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mi_idx.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ it.id:8!null\n" + - " │ │ └─ mi_idx.info_type_id:7!null\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ top 250 rank (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + + " │ │ ├─ mc.movie_id:5!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ it.id:8!null\n" + + " │ └─ mi_idx.info_type_id:4!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ct.kind:1!null\n" + - " │ └─ production companies (longtext)\n" + - " └─ TableAlias(ct)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ ct.id:10!null\n" + + " │ └─ mc.company_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'\n" + + " │ │ └─ mc.note LIKE '%(co-production)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ top 250 rank (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ ct.kind:1!null\n" + + " │ └─ production companies (longtext)\n" + + " └─ TableAlias(ct)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mc.note) as production_note, min(t.title) as movie_title, min(t.production_year) as movie_year]\n" + @@ -11318,40 +10622,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(mc.note), MIN(t.production_year), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ ((NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%')) AND mc.note LIKE '%(co-production)%')\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi_idx.info_type_id)\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'top 250 rank')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi_idx.movie_id) AND (it.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%')) AND mc.note LIKE '%(co-production)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'top 250 rank')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mc.note) as production_note, min(t.title) as movie_title, min(t.production_year) as movie_year]\n" + @@ -11359,40 +10663,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(mc.note), MIN(t.production_year), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ ((NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%')) AND mc.note LIKE '%(co-production)%')\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi_idx.info_type_id)\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'top 250 rank')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi_idx.movie_id) AND (it.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%')) AND mc.note LIKE '%(co-production)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'top 250 rank')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", }, { @@ -11419,69 +10723,69 @@ WHERE ct.kind = 'production companies' ExpectedPlan: "Project\n" + " ├─ columns: [min(mc.note):0!null->production_note:0, min(t.title):2!null->movie_title:0, min(t.production_year):1!null->movie_year:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mc.note:5), MIN(t.production_year:2), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mc.note:7), MIN(t.production_year:2), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:10!null\n" + - " │ │ │ └─ mc.company_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:3!null\n" + - " │ │ └─ mi_idx.movie_id:6!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2000 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ NOT\n" + - " │ │ └─ mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mc.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mi_idx.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ it.id:8!null\n" + - " │ │ └─ mi_idx.info_type_id:7!null\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ bottom 10 rank (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + + " │ │ ├─ mc.movie_id:5!null\n" + + " │ │ └─ mi_idx.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ it.id:8!null\n" + + " │ └─ mi_idx.info_type_id:4!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ct.kind:1!null\n" + - " │ └─ production companies (longtext)\n" + - " └─ TableAlias(ct)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ ct.id:10!null\n" + + " │ └─ mc.company_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ bottom 10 rank (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ ct.kind:1!null\n" + + " │ └─ production companies (longtext)\n" + + " └─ TableAlias(ct)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mc.note) as production_note, min(t.title) as movie_title, min(t.production_year) as movie_year]\n" + @@ -11489,40 +10793,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(mc.note), MIN(t.production_year), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2000)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'))\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi_idx.info_type_id)\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'bottom 10 rank')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi_idx.movie_id) AND (it.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'bottom 10 rank')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mc.note) as production_note, min(t.title) as movie_title, min(t.production_year) as movie_year]\n" + @@ -11530,40 +10834,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(mc.note), MIN(t.production_year), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2000)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'))\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi_idx.info_type_id)\n" + - " │ ├─ TableAlias(mi_idx)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info_idx\n" + - " │ │ └─ columns: [movie_id info_type_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'bottom 10 rank')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " ├─ ((t.id = mc.movie_id) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi_idx.movie_id) AND (it.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(mc.note LIKE '%(as Metro-Goldwyn-Mayer Pictures)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'bottom 10 rank')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", }, { @@ -11616,123 +10920,130 @@ WHERE cct1.kind = 'cast' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:19!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ kt.id:7!null\n" + + " │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:13!null\n" + - " │ │ └─ ci.movie_id:19!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ ci.movie_id:12!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ ci.movie_id:19!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:13!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ └─ t.kind_id:2!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ └─ 1950 (int)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ └─ cast (longtext)\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ └─ tableId: 2\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ └─ movie (longtext)\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:15!null\n" + - " │ │ └─ mk.keyword_id:14!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " │ └─ cc.movie_id:20\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 1950 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:17!null\n" + - " │ └─ ci.person_id:18!null\n" + + " │ ├─ n.id:4!null\n" + + " │ └─ ci.person_id:11!null\n" + " ├─ TableAlias(n)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ chn.id:21!null\n" + - " │ └─ ci.person_role_id:20\n" + - " ├─ TableAlias(ci)\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.movie_id:5!null\n" + + " │ │ │ └─ ci.movie_id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ cc.movie_id:20\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:9!null\n" + + " │ └─ mk.keyword_id:6!null\n" + + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ AND\n" + - " │ ├─ NOT\n" + - " │ │ └─ chn.name LIKE '%Sherlock%'\n" + - " │ └─ Or\n" + - " │ ├─ chn.name LIKE '%Tony%Stark%'\n" + - " │ └─ chn.name LIKE '%Iron%Man%'\n" + - " └─ TableAlias(chn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:12!null\n" + + " │ │ └─ cc.movie_id:20\n" + + " │ └─ Eq\n" + + " │ ├─ chn.id:14!null\n" + + " │ └─ ci.person_role_id:13\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ chn.name LIKE '%Sherlock%'\n" + + " │ │ └─ Or\n" + + " │ │ ├─ chn.name LIKE '%Tony%Stark%'\n" + + " │ │ └─ chn.name LIKE '%Iron%Man%'\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:16!null\n" + + " │ └─ cc.status_id:22!null\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:18!null\n" + + " │ └─ cc.subject_id:21!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as complete_downey_ironman_movie]\n" + @@ -11740,57 +11051,13 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ci.movie_id = cc.movie_id) AND (mk.movie_id = ci.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (t.production_year > 1950)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1950)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ TableAlias(n)\n" + @@ -11798,17 +11065,58 @@ WHERE cct1.kind = 'cast' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ TableAlias(ci)\n" + + " ├─ (((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ ((NOT(chn.name LIKE '%Sherlock%')) AND (chn.name LIKE '%Tony%Stark%' OR chn.name LIKE '%Iron%Man%'))\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name LIKE '%Sherlock%')) AND (chn.name LIKE '%Tony%Stark%' OR chn.name LIKE '%Iron%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as complete_downey_ironman_movie]\n" + @@ -11816,57 +11124,13 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ci.movie_id = cc.movie_id) AND (mk.movie_id = ci.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (t.production_year > 1950)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1950)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ TableAlias(n)\n" + @@ -11874,17 +11138,58 @@ WHERE cct1.kind = 'cast' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ TableAlias(ci)\n" + + " ├─ (((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ ((NOT(chn.name LIKE '%Sherlock%')) AND (chn.name LIKE '%Tony%Stark%' OR chn.name LIKE '%Iron%Man%'))\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name LIKE '%Sherlock%')) AND (chn.name LIKE '%Tony%Stark%' OR chn.name LIKE '%Iron%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -11938,97 +11243,32 @@ WHERE cct1.kind = 'cast' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:20!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ kt.id:8!null\n" + + " │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:6!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:13!null\n" + - " │ │ └─ ci.movie_id:20!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ ci.movie_id:13!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ ci.movie_id:20!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:13!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ └─ t.kind_id:2!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ └─ cast (longtext)\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ └─ tableId: 2\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ └─ movie (longtext)\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:15!null\n" + - " │ │ └─ mk.keyword_id:14!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " │ └─ cc.movie_id:21\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:17!null\n" + - " │ └─ ci.person_id:19!null\n" + + " │ ├─ n.id:4!null\n" + + " │ └─ ci.person_id:12!null\n" + " ├─ Filter\n" + " │ ├─ n.name LIKE '%Downey%Robert%'\n" + " │ └─ TableAlias(n)\n" + @@ -12037,26 +11277,98 @@ WHERE cct1.kind = 'cast' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ chn.id:22!null\n" + - " │ └─ ci.person_role_id:21\n" + - " ├─ TableAlias(ci)\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.movie_id:6!null\n" + + " │ │ │ └─ ci.movie_id:13!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:21\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:10!null\n" + + " │ └─ mk.keyword_id:7!null\n" + + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ AND\n" + - " │ ├─ NOT\n" + - " │ │ └─ chn.name LIKE '%Sherlock%'\n" + - " │ └─ Or\n" + - " │ ├─ chn.name LIKE '%Tony%Stark%'\n" + - " │ └─ chn.name LIKE '%Iron%Man%'\n" + - " └─ TableAlias(chn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:13!null\n" + + " │ │ └─ cc.movie_id:21\n" + + " │ └─ Eq\n" + + " │ ├─ chn.id:15!null\n" + + " │ └─ ci.person_role_id:14\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ chn.name LIKE '%Sherlock%'\n" + + " │ │ └─ Or\n" + + " │ │ ├─ chn.name LIKE '%Tony%Stark%'\n" + + " │ │ └─ chn.name LIKE '%Iron%Man%'\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:17!null\n" + + " │ └─ cc.status_id:23!null\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:19!null\n" + + " │ └─ cc.subject_id:22!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as complete_downey_ironman_movie]\n" + @@ -12064,57 +11376,13 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ci.movie_id = cc.movie_id) AND (mk.movie_id = ci.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -12124,17 +11392,58 @@ WHERE cct1.kind = 'cast' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ TableAlias(ci)\n" + + " ├─ (((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ ((NOT(chn.name LIKE '%Sherlock%')) AND (chn.name LIKE '%Tony%Stark%' OR chn.name LIKE '%Iron%Man%'))\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name LIKE '%Sherlock%')) AND (chn.name LIKE '%Tony%Stark%' OR chn.name LIKE '%Iron%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as complete_downey_ironman_movie]\n" + @@ -12142,57 +11451,13 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ci.movie_id = cc.movie_id) AND (mk.movie_id = ci.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -12202,17 +11467,58 @@ WHERE cct1.kind = 'cast' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ TableAlias(ci)\n" + + " ├─ (((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ ((NOT(chn.name LIKE '%Sherlock%')) AND (chn.name LIKE '%Tony%Stark%' OR chn.name LIKE '%Iron%Man%'))\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name LIKE '%Sherlock%')) AND (chn.name LIKE '%Tony%Stark%' OR chn.name LIKE '%Iron%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -12263,128 +11569,135 @@ WHERE cct1.kind = 'cast' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->cast_member:0, min(t.title):1!null->complete_dynamic_hero_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:18!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(n.name:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:20!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ kt.id:8!null\n" + + " │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:6!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:13!null\n" + - " │ │ └─ ci.movie_id:20!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ ci.movie_id:13!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ ci.movie_id:20!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:13!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ └─ t.kind_id:2!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ └─ cast (longtext)\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ └─ tableId: 2\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ └─ movie (longtext)\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:15!null\n" + - " │ │ └─ mk.keyword_id:14!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext), magnet (longtext), web (longtext), claw (longtext), laser (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " │ └─ cc.movie_id:21\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:17!null\n" + - " │ └─ ci.person_id:19!null\n" + + " │ ├─ n.id:4!null\n" + + " │ └─ ci.person_id:12!null\n" + " ├─ TableAlias(n)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ chn.id:22!null\n" + - " │ └─ ci.person_role_id:21\n" + - " ├─ TableAlias(ci)\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.movie_id:6!null\n" + + " │ │ │ └─ ci.movie_id:13!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:21\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:10!null\n" + + " │ └─ mk.keyword_id:7!null\n" + + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ AND\n" + - " │ ├─ NOT\n" + - " │ │ └─ chn.name:1!null IS NULL\n" + - " │ └─ Or\n" + - " │ ├─ chn.name LIKE '%man%'\n" + - " │ └─ chn.name LIKE '%Man%'\n" + - " └─ TableAlias(chn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext), magnet (longtext), web (longtext), claw (longtext), laser (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:13!null\n" + + " │ │ └─ cc.movie_id:21\n" + + " │ └─ Eq\n" + + " │ ├─ chn.id:15!null\n" + + " │ └─ ci.person_role_id:14\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ chn.name:1!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ chn.name LIKE '%man%'\n" + + " │ │ └─ chn.name LIKE '%Man%'\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:17!null\n" + + " │ └─ cc.status_id:23!null\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:19!null\n" + + " │ └─ cc.subject_id:22!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as cast_member, min(t.title) as complete_dynamic_hero_movie]\n" + @@ -12392,57 +11705,13 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ci.movie_id = cc.movie_id) AND (mk.movie_id = ci.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ TableAlias(n)\n" + @@ -12450,17 +11719,58 @@ WHERE cct1.kind = 'cast' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ TableAlias(ci)\n" + + " ├─ (((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as cast_member, min(t.title) as complete_dynamic_hero_movie]\n" + @@ -12468,57 +11778,13 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ci.movie_id = cc.movie_id) AND (mk.movie_id = ci.movie_id)) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: title\n" + - " │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: complete_cast\n" + - " │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ └─ TableAlias(kt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: kind_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ TableAlias(n)\n" + @@ -12526,17 +11792,58 @@ WHERE cct1.kind = 'cast' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ (chn.id = ci.person_role_id)\n" + - " ├─ TableAlias(ci)\n" + + " ├─ (((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + - " │ ├─ name: cast_info\n" + - " │ └─ columns: [person_id movie_id person_role_id]\n" + - " └─ Filter\n" + - " ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + - " └─ TableAlias(chn)\n" + - " └─ Table\n" + - " ├─ name: char_name\n" + - " └─ columns: [id name]\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -12588,139 +11895,145 @@ WHERE cn.country_code !='[pl]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->company_name:0, min(lt.link):1!null->link_type:0, min(t.title):2!null->western_follow_up:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:8!null), MIN(lt.link:15!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(cn.name:20!null), MIN(lt.link:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ mc.movie_id:3!null\n" + - " │ │ │ │ │ │ └─ mi.movie_id:20!null\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ mk.movie_id:16!null\n" + - " │ │ │ │ │ └─ mc.movie_id:3!null\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ ml.movie_id:12!null\n" + - " │ │ │ │ └─ mc.movie_id:3!null\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ └─ t.id:0!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ ml.movie_id:12!null\n" + - " │ │ │ └─ t.id:0!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:16!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + " │ └─ Eq\n" + - " │ ├─ mi.movie_id:20!null\n" + + " │ ├─ mi.movie_id:7!null\n" + " │ └─ t.id:0!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ ├─ t.production_year:2\n" + - " │ │ │ │ └─ 1950 (smallint)\n" + - " │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2000 (smallint)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_type_id:5!null\n" + - " │ │ └─ ct.id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:4!null\n" + - " │ │ │ └─ cn.id:7!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note:3 IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ cn.name LIKE '%Film%'\n" + - " │ │ │ └─ cn.name LIKE '%Warner%'\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.kind:1!null\n" + - " │ │ └─ production companies (longtext)\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:12!null\n" + - " │ │ └─ mk.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ lt.id:14!null\n" + - " │ │ │ └─ ml.link_type_id:13!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:17!null\n" + - " │ │ └─ k.id:18!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ sequel (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ mi.info:1!null\n" + - " │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ keys: [mk.movie_id:16!null]\n" + - " ├─ colSet: (20-24)\n" + - " ├─ tableId: 6\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info]\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 1950 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ lt.id:13!null\n" + + " │ │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ │ └─ k.id:15!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ mc.movie_id:9!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_type_id:11!null\n" + + " │ │ └─ ct.id:17!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:10!null\n" + + " │ └─ cn.id:19!null\n" + + " ├─ Filter\n" + + " │ ├─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ sequel (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [pl] (longtext)\n" + + " │ └─ Or\n" + + " │ ├─ cn.name LIKE '%Film%'\n" + + " │ └─ cn.name LIKE '%Warner%'\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as company_name, min(lt.link) as link_type, min(t.title) as western_follow_up]\n" + @@ -12728,71 +12041,68 @@ WHERE cn.country_code !='[pl]' " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((((mc.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = t.id)) AND (t.id = mk.movie_id)) AND (mi.movie_id = t.id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'sequel')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ columns: [movie_id info]\n" + - " └─ keys: mk.movie_id\n" + + " ├─ ((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mc.movie_id = mi.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as company_name, min(lt.link) as link_type, min(t.title) as western_follow_up]\n" + @@ -12800,71 +12110,68 @@ WHERE cn.country_code !='[pl]' " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((((mc.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = t.id)) AND (t.id = mk.movie_id)) AND (mi.movie_id = t.id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'sequel')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ columns: [movie_id info]\n" + - " └─ keys: mk.movie_id\n" + + " ├─ ((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mc.movie_id = mi.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -12909,140 +12216,146 @@ WHERE cn.country_code !='[pl]' `, ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->company_name:0, min(lt.link):1!null->link_type:0, min(t.title):2!null->german_follow_up:0]\n" + - " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:8!null), MIN(lt.link:15!null), MIN(t.title:1!null)\n" + - " ├─ group: \n" + - " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ mc.movie_id:3!null\n" + - " │ │ │ │ │ │ └─ mi.movie_id:20!null\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ mk.movie_id:16!null\n" + - " │ │ │ │ │ └─ mc.movie_id:3!null\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ ml.movie_id:12!null\n" + - " │ │ │ │ └─ mc.movie_id:3!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ ml.movie_id:12!null\n" + - " │ │ │ └─ t.id:0!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:16!null\n" + - " │ └─ Eq\n" + - " │ ├─ mi.movie_id:20!null\n" + - " │ └─ t.id:0!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ ├─ t.production_year:2\n" + - " │ │ │ │ └─ 2000 (smallint)\n" + - " │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (smallint)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_type_id:5!null\n" + - " │ │ └─ ct.id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:4!null\n" + - " │ │ │ └─ cn.id:7!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note:3 IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ cn.name LIKE '%Film%'\n" + - " │ │ │ └─ cn.name LIKE '%Warner%'\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.kind:1!null\n" + - " │ │ └─ production companies (longtext)\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:12!null\n" + - " │ │ └─ mk.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ lt.id:14!null\n" + - " │ │ │ └─ ml.link_type_id:13!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:17!null\n" + - " │ │ └─ k.id:18!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ sequel (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ mi.info:1!null\n" + - " │ └─ TUPLE(Germany (longtext), German (longtext))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ keys: [mk.movie_id:16!null]\n" + - " ├─ colSet: (20-24)\n" + - " ├─ tableId: 6\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info]\n" + + " └─ GroupBy\n" + + " ├─ select: MIN(cn.name:20!null), MIN(lt.link:14!null), MIN(t.title:1!null)\n" + + " ├─ group: \n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ └─ t.id:0!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi.movie_id:7!null\n" + + " │ └─ t.id:0!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2000 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ lt.id:13!null\n" + + " │ │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ │ └─ k.id:15!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ mc.movie_id:9!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Germany (longtext), German (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_type_id:11!null\n" + + " │ │ └─ ct.id:17!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:10!null\n" + + " │ └─ cn.id:19!null\n" + + " ├─ Filter\n" + + " │ ├─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ sequel (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [pl] (longtext)\n" + + " │ └─ Or\n" + + " │ ├─ cn.name LIKE '%Film%'\n" + + " │ └─ cn.name LIKE '%Warner%'\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as company_name, min(lt.link) as link_type, min(t.title) as german_follow_up]\n" + @@ -13050,71 +12363,68 @@ WHERE cn.country_code !='[pl]' " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((((mc.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = t.id)) AND (t.id = mk.movie_id)) AND (mi.movie_id = t.id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'sequel')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Germany', 'German'))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ columns: [movie_id info]\n" + - " └─ keys: mk.movie_id\n" + + " ├─ ((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mc.movie_id = mi.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Germany', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as company_name, min(lt.link) as link_type, min(t.title) as german_follow_up]\n" + @@ -13122,71 +12432,68 @@ WHERE cn.country_code !='[pl]' " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((((mc.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = t.id)) AND (t.id = mk.movie_id)) AND (mi.movie_id = t.id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'sequel')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Germany', 'German'))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ columns: [movie_id info]\n" + - " └─ keys: mk.movie_id\n" + + " ├─ ((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mc.movie_id = mi.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Germany', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -13239,139 +12546,145 @@ WHERE cn.country_code !='[pl]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->company_name:0, min(lt.link):1!null->link_type:0, min(t.title):2!null->western_follow_up:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:8!null), MIN(lt.link:15!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(cn.name:20!null), MIN(lt.link:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ mc.movie_id:3!null\n" + - " │ │ │ │ │ │ └─ mi.movie_id:20!null\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ mk.movie_id:16!null\n" + - " │ │ │ │ │ └─ mc.movie_id:3!null\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ ml.movie_id:12!null\n" + - " │ │ │ │ └─ mc.movie_id:3!null\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ └─ t.id:0!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ ml.movie_id:12!null\n" + - " │ │ │ └─ t.id:0!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:16!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + " │ └─ Eq\n" + - " │ ├─ mi.movie_id:20!null\n" + + " │ ├─ mi.movie_id:7!null\n" + " │ └─ t.id:0!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ ├─ t.production_year:2\n" + - " │ │ │ │ └─ 1950 (smallint)\n" + - " │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (smallint)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_type_id:5!null\n" + - " │ │ └─ ct.id:10!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.company_id:4!null\n" + - " │ │ │ └─ cn.id:7!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note:3 IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ cn.name LIKE '%Film%'\n" + - " │ │ │ └─ cn.name LIKE '%Warner%'\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.kind:1!null\n" + - " │ │ └─ production companies (longtext)\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:12!null\n" + - " │ │ └─ mk.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ lt.id:14!null\n" + - " │ │ │ └─ ml.link_type_id:13!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:17!null\n" + - " │ │ └─ k.id:18!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ sequel (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ mi.info:1!null\n" + - " │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), English (longtext))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ keys: [mk.movie_id:16!null]\n" + - " ├─ colSet: (20-24)\n" + - " ├─ tableId: 6\n" + - " └─ Table\n" + - " ├─ name: movie_info\n" + - " └─ columns: [movie_id info]\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 1950 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ lt.id:13!null\n" + + " │ │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ │ └─ k.id:15!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mc.movie_id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ mc.movie_id:9!null\n" + + " │ └─ mi.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), English (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_type_id:11!null\n" + + " │ │ └─ ct.id:17!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:10!null\n" + + " │ └─ cn.id:19!null\n" + + " ├─ Filter\n" + + " │ ├─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ sequel (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [pl] (longtext)\n" + + " │ └─ Or\n" + + " │ ├─ cn.name LIKE '%Film%'\n" + + " │ └─ cn.name LIKE '%Warner%'\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as company_name, min(lt.link) as link_type, min(t.title) as western_follow_up]\n" + @@ -13379,71 +12692,68 @@ WHERE cn.country_code !='[pl]' " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((((mc.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = t.id)) AND (t.id = mk.movie_id)) AND (mi.movie_id = t.id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2010))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'sequel')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'English'))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ columns: [movie_id info]\n" + - " └─ keys: mk.movie_id\n" + + " ├─ ((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mc.movie_id = mi.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'English'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as company_name, min(lt.link) as link_type, min(t.title) as western_follow_up]\n" + @@ -13451,71 +12761,68 @@ WHERE cn.country_code !='[pl]' " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((((mc.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = t.id)) AND (t.id = mk.movie_id)) AND (mi.movie_id = t.id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2010))\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (mc.company_id = cn.id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ mc.note IS NULL\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ Filter\n" + - " │ ├─ (ct.kind = 'production companies')\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ LookupJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'sequel')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'English'))\n" + - " └─ TableAlias(mi)\n" + - " └─ IndexedTableAccess(movie_info)\n" + - " ├─ index: [movie_info.movie_id]\n" + - " ├─ columns: [movie_id info]\n" + - " └─ keys: mk.movie_id\n" + + " ├─ ((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mc.movie_id = mi.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'English'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.company_type_id = ct.id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ Filter\n" + + " ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -13569,169 +12876,174 @@ WHERE cn.country_code != '[us]' AND cn.id = mc.company_id; `, - ExpectedPlan: "Project\n" + - " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->western_violent_movie:0]\n" + - " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(mi_idx.info:16!null), MIN(t.title:1!null)\n" + - " ├─ group: \n" + - " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:24!null\n" + - " │ │ │ │ └─ mi.movie_id:19!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:24!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:24!null\n" + - " │ │ └─ mc.movie_id:6!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:24!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:19!null\n" + - " │ │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:19!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi.movie_id:19!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:6!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:4!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ └─ 2008 (int)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ct.id:13!null\n" + - " │ │ │ │ └─ mc.company_type_id:8!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cn.id:10!null\n" + - " │ │ │ │ │ └─ mc.company_id:7!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ │ │ │ └─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:17!null\n" + - " │ │ │ └─ mi_idx.info_type_id:15!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ └─ 7.0 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.id:22!null\n" + - " │ │ └─ mi.info_type_id:20!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Germany (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ countries (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (10,11)\n" + - " │ └─ tableId: 3\n" + + ExpectedPlan: "Project\n" + + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->western_violent_movie:0]\n" + + " └─ GroupBy\n" + + " ├─ select: MIN(cn.name:26!null), MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + + " ├─ group: \n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ kt.id:16!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2008 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:26!null\n" + - " │ └─ mk.keyword_id:25!null\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:18!null\n" + + " │ └─ mk.keyword_id:5!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ k.keyword:1!null\n" + - " │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:12!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:20!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 7.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:22!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Germany (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.id:24!null\n" + + " │ │ └─ mc.company_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:25!null\n" + + " │ └─ mc.company_id:13!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(200%)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ countries (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ NOT\n" + + " │ └─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as western_violent_movie]\n" + @@ -13739,87 +13051,82 @@ WHERE cn.country_code != '[us]' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (t.id = mi.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mc.movie_id = mi_idx.movie_id) AND (t.id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mc.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2008)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '7.0')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Germany', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2008)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '7.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mc.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Germany', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[us]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as western_violent_movie]\n" + @@ -13827,87 +13134,82 @@ WHERE cn.country_code != '[us]' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (t.id = mi.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mc.movie_id = mi_idx.movie_id) AND (t.id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mc.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2008)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '7.0')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Germany', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2008)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '7.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mc.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Germany', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[us]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -13964,166 +13266,171 @@ WHERE cn.country_code != '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->western_violent_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(mi_idx.info:16!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(cn.name:26!null), MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:24!null\n" + - " │ │ │ │ └─ mi.movie_id:19!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ kt.id:16!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:9!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:24!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:4!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:24!null\n" + - " │ │ └─ mc.movie_id:6!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:24!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:19!null\n" + - " │ │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:19!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi.movie_id:19!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:6!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:4!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ └─ 2009 (int)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ct.id:13!null\n" + - " │ │ │ │ └─ mc.company_type_id:8!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cn.id:10!null\n" + - " │ │ │ │ │ └─ mc.company_id:7!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ │ │ │ └─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:17!null\n" + - " │ │ │ └─ mi_idx.info_type_id:15!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ └─ 7.0 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.id:22!null\n" + - " │ │ └─ mi.info_type_id:20!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Germany (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ countries (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (10,11)\n" + - " │ └─ tableId: 3\n" + + " │ └─ mc.movie_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2009 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:26!null\n" + - " │ └─ mk.keyword_id:25!null\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:18!null\n" + + " │ └─ mk.keyword_id:5!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ k.keyword:1!null\n" + - " │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:12!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:20!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 7.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:22!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Germany (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.id:24!null\n" + + " │ │ └─ mc.company_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:25!null\n" + + " │ └─ mc.company_id:13!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(200%)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ countries (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ NOT\n" + + " │ └─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as western_violent_movie]\n" + @@ -14131,87 +13438,82 @@ WHERE cn.country_code != '[us]' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (t.id = mi.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mc.movie_id = mi_idx.movie_id) AND (t.id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mc.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2009)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '7.0')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Germany', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2009)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '7.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mc.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Germany', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[us]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as western_violent_movie]\n" + @@ -14219,87 +13521,82 @@ WHERE cn.country_code != '[us]' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (t.id = mi.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mc.movie_id = mi_idx.movie_id) AND (t.id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mc.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2009)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '7.0')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Germany', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2009)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '7.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mc.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Germany', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[us]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -14362,166 +13659,171 @@ WHERE cn.country_code != '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->western_violent_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(mi_idx.info:16!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(cn.name:26!null), MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:24!null\n" + - " │ │ │ │ └─ mi.movie_id:19!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ kt.id:16!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:9!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:24!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:4!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:24!null\n" + - " │ │ └─ mc.movie_id:6!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:24!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:19!null\n" + - " │ │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:19!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi.movie_id:19!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:6!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi_idx.movie_id:14!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:4!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ └─ 2005 (int)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ct.id:13!null\n" + - " │ │ │ │ └─ mc.company_type_id:8!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cn.id:10!null\n" + - " │ │ │ │ │ └─ mc.company_id:7!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ │ │ │ └─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:17!null\n" + - " │ │ │ └─ mi_idx.info_type_id:15!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ └─ 8.5 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.id:22!null\n" + - " │ │ └─ mi.info_type_id:20!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ countries (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (10,11)\n" + - " │ └─ tableId: 3\n" + + " │ └─ mc.movie_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:26!null\n" + - " │ └─ mk.keyword_id:25!null\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:18!null\n" + + " │ └─ mk.keyword_id:5!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ k.keyword:1!null\n" + - " │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:12!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:20!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.5 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:22!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.id:24!null\n" + + " │ │ └─ mc.company_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:25!null\n" + + " │ └─ mc.company_id:13!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(200%)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ countries (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ NOT\n" + + " │ └─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as western_violent_movie]\n" + @@ -14529,87 +13831,82 @@ WHERE cn.country_code != '[us]' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (t.id = mi.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mc.movie_id = mi_idx.movie_id) AND (t.id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mc.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '8.5')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mc.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[us]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as western_violent_movie]\n" + @@ -14617,87 +13914,82 @@ WHERE cn.country_code != '[us]' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (t.id = mi.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mc.movie_id = mi_idx.movie_id) AND (t.id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mc.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '8.5')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mc.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[us]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -14758,161 +14050,166 @@ WHERE cn.country_code != '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->western_violent_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:10!null), MIN(mi_idx.info:15!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(cn.name:25!null), MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ │ └─ mi.movie_id:18!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ kt.id:15!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:9!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ └─ mi_idx.movie_id:13!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:4!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:23!null\n" + - " │ │ └─ mc.movie_id:6!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:23!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:18!null\n" + - " │ │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:18!null\n" + - " │ │ │ └─ mi_idx.movie_id:13!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi.movie_id:18!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:6!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:13!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi_idx.movie_id:13!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mc.movie_id:6!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:4!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ └─ 2005 (int)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ct.id:12!null\n" + - " │ │ │ │ └─ mc.company_type_id:8!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cn.id:9!null\n" + - " │ │ │ │ │ └─ mc.company_id:7!null\n" + - " │ │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:16!null\n" + - " │ │ │ └─ mi_idx.info_type_id:14!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ └─ 8.5 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.id:21!null\n" + - " │ │ └─ mi.info_type_id:19!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ countries (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ ├─ columns: [id info]\n" + - " │ ├─ colSet: (10,11)\n" + - " │ └─ tableId: 3\n" + + " │ └─ mc.movie_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:25!null\n" + - " │ └─ mk.keyword_id:24!null\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:17!null\n" + + " │ └─ mk.keyword_id:5!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ k.keyword:1!null\n" + - " │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.movie_id:12!null\n" + + " │ │ └─ mi_idx.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:19!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.5 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:21!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.id:23!null\n" + + " │ │ └─ mc.company_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:24!null\n" + + " │ └─ mc.company_id:13!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ countries (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (10,11)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ NOT\n" + + " │ └─ Eq\n" + + " │ ├─ cn.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as western_violent_movie]\n" + @@ -14920,85 +14217,80 @@ WHERE cn.country_code != '[us]' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (t.id = mi.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mc.movie_id = mi_idx.movie_id) AND (t.id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mc.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '8.5')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mc.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[us]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as western_violent_movie]\n" + @@ -15006,85 +14298,80 @@ WHERE cn.country_code != '[us]' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (t.id = mi.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mc.movie_id = mi_idx.movie_id) AND (t.id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mc.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ │ ├─ TableAlias(mc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: company_name\n" + - " │ │ │ │ └─ columns: [id name country_code]\n" + - " │ │ │ └─ TableAlias(ct)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_type\n" + - " │ │ │ └─ columns: [id]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx.info < '8.5')\n" + - " │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'countries')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((mi.movie_id = mc.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ct.id = mc.company_type_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn.country_code = '[us]')))\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -15132,148 +14419,161 @@ WHERE cct1.kind = 'complete+verified' ExpectedPlan: "Project\n" + " ├─ columns: [min(kt.kind):0!null->movie_kind:0, min(t.title):1!null->complete_us_internet_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(kt.kind:9!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(kt.kind:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:22!null\n" + - " │ │ │ │ └─ mi.movie_id:10!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ kt.id:13!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:6!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:22!null\n" + - " │ │ │ └─ mc.movie_id:16!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:4!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:22!null\n" + - " │ │ └─ cc.movie_id:6\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:10!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:22!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mi.movie_id:10!null\n" + - " │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi.movie_id:10!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ kt.id:8!null\n" + - " │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ └─ cc.movie_id:6\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cct1.id:4!null\n" + - " │ │ │ │ │ └─ cc.status_id:7!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ └─ complete+verified (longtext)\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ └─ TUPLE(movie (longtext))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:14!null\n" + - " │ │ │ └─ mi.info_type_id:11!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ │ └─ NOT\n" + - " │ │ │ │ │ └─ mi.info:2!null IS NULL\n" + - " │ │ │ │ └─ Or\n" + - " │ │ │ │ ├─ mi.info LIKE 'USA:% 199%'\n" + - " │ │ │ │ └─ mi.info LIKE 'USA:% 200%'\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ release dates (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:21!null\n" + - " │ │ └─ mc.company_type_id:18!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:19!null\n" + - " │ │ │ └─ mc.company_id:17!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ └─ [us] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " │ └─ cc.movie_id:23\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:24!null\n" + - " │ └─ mk.keyword_id:23!null\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mc.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ cc.movie_id:23\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:15!null\n" + + " │ └─ mk.keyword_id:5!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:6!null\n" + + " │ │ │ └─ mc.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:23\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:16!null\n" + + " │ └─ mi.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ mi.note LIKE '%internet%'\n" + + " │ │ │ └─ NOT\n" + + " │ │ │ └─ mi.info:2!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mi.info LIKE 'USA:% 199%'\n" + + " │ │ └─ mi.info LIKE 'USA:% 200%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:10!null\n" + + " │ │ │ └─ cc.movie_id:23\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:19!null\n" + + " │ │ └─ mc.company_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:18!null\n" + + " │ └─ mc.company_type_id:12!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:21!null\n" + + " │ └─ cc.status_id:24!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ complete+verified (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(kt.kind) as movie_kind, min(t.title) as complete_us_internet_movie]\n" + @@ -15281,81 +14581,76 @@ WHERE cct1.kind = 'complete+verified' " ├─ SelectedExprs(MIN(kt.kind), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ (cct1.id = cc.status_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (cct1.kind = 'complete+verified')\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (kt.kind HASH IN ('movie'))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(kt.kind) as movie_kind, min(t.title) as complete_us_internet_movie]\n" + @@ -15363,81 +14658,76 @@ WHERE cct1.kind = 'complete+verified' " ├─ SelectedExprs(MIN(kt.kind), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ (cct1.id = cc.status_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (cct1.kind = 'complete+verified')\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (kt.kind HASH IN ('movie'))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + "", }, { @@ -15487,231 +14777,239 @@ WHERE cct1.kind = 'complete+verified' ExpectedPlan: "Project\n" + " ├─ columns: [min(kt.kind):0!null->movie_kind:0, min(t.title):1!null->complete_nerdy_internet_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(kt.kind:9!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(kt.kind:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:22!null\n" + - " │ │ │ │ └─ mi.movie_id:10!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ kt.id:13!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:6!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:22!null\n" + - " │ │ │ └─ mc.movie_id:16!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:4!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:22!null\n" + - " │ │ └─ cc.movie_id:6\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:10!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:22!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mi.movie_id:10!null\n" + - " │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi.movie_id:10!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ kt.id:8!null\n" + - " │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ └─ cc.movie_id:6\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cct1.id:4!null\n" + - " │ │ │ │ │ └─ cc.status_id:7!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ └─ complete+verified (longtext)\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ └─ TUPLE(movie (longtext))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:14!null\n" + - " │ │ │ └─ mi.info_type_id:11!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ └─ mi.info LIKE 'USA:% 200%'\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ release dates (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:21!null\n" + - " │ │ └─ mc.company_type_id:18!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:19!null\n" + - " │ │ │ └─ mc.company_id:17!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ └─ [us] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " │ └─ cc.movie_id:24\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:24!null\n" + - " │ └─ mk.keyword_id:23!null\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mc.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ cc.movie_id:24\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:15!null\n" + + " │ └─ mk.keyword_id:5!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ k.keyword:1!null\n" + - " │ └─ TUPLE(nerd (longtext), loner (longtext), alienation (longtext), dignity (longtext))\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + - "", - ExpectedEstimates: "Project\n" + - " ├─ columns: [min(kt.kind) as movie_kind, min(t.title) as complete_nerdy_internet_movie]\n" + - " └─ GroupBy\n" + - " ├─ SelectedExprs(MIN(kt.kind), MIN(t.title))\n" + - " ├─ Grouping()\n" + - " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ (cct1.id = cc.status_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (cct1.kind = 'complete+verified')\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (kt.kind HASH IN ('movie'))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:6!null\n" + + " │ │ │ └─ mc.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:24\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:17!null\n" + + " │ └─ mi.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mi.note LIKE '%internet%'\n" + + " │ │ └─ mi.info LIKE 'USA:% 200%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:10!null\n" + + " │ │ │ └─ cc.movie_id:24\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:20!null\n" + + " │ │ └─ mc.company_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:19!null\n" + + " │ └─ mc.company_type_id:12!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(nerd (longtext), loner (longtext), alienation (longtext), dignity (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:22!null\n" + + " │ └─ cc.status_id:25!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ complete+verified (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + + "", + ExpectedEstimates: "Project\n" + + " ├─ columns: [min(kt.kind) as movie_kind, min(t.title) as complete_nerdy_internet_movie]\n" + + " └─ GroupBy\n" + + " ├─ SelectedExprs(MIN(kt.kind), MIN(t.title))\n" + + " ├─ Grouping()\n" + + " └─ InnerJoin\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('nerd', 'loner', 'alienation', 'dignity'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('nerd', 'loner', 'alienation', 'dignity'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(kt.kind) as movie_kind, min(t.title) as complete_nerdy_internet_movie]\n" + @@ -15719,83 +15017,78 @@ WHERE cct1.kind = 'complete+verified' " ├─ SelectedExprs(MIN(kt.kind), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ (cct1.id = cc.status_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (cct1.kind = 'complete+verified')\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (kt.kind HASH IN ('movie'))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword HASH IN ('nerd', 'loner', 'alienation', 'dignity'))\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.note LIKE '%internet%' AND mi.info LIKE 'USA:% 200%')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('nerd', 'loner', 'alienation', 'dignity'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + "", }, { @@ -15846,148 +15139,161 @@ WHERE cct1.kind = 'complete+verified' ExpectedPlan: "Project\n" + " ├─ columns: [min(kt.kind):0!null->movie_kind:0, min(t.title):1!null->complete_us_internet_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(kt.kind:9!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(kt.kind:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:22!null\n" + - " │ │ │ │ └─ mi.movie_id:10!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ kt.id:13!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:6!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:22!null\n" + - " │ │ │ └─ mc.movie_id:16!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mk.movie_id:4!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:22!null\n" + - " │ │ └─ cc.movie_id:6\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:10!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:22!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mi.movie_id:10!null\n" + - " │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mi.movie_id:10!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ kt.id:8!null\n" + - " │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ └─ cc.movie_id:6\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ └─ 1990 (int)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ cct1.id:4!null\n" + - " │ │ │ │ │ └─ cc.status_id:7!null\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ └─ complete+verified (longtext)\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ └─ TUPLE(movie (longtext), tv movie (longtext), video movie (longtext), video game (longtext))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:14!null\n" + - " │ │ │ └─ mi.info_type_id:11!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ mi.note LIKE '%internet%'\n" + - " │ │ │ │ │ └─ NOT\n" + - " │ │ │ │ │ └─ mi.info:2!null IS NULL\n" + - " │ │ │ │ └─ Or\n" + - " │ │ │ │ ├─ mi.info LIKE 'USA:% 199%'\n" + - " │ │ │ │ └─ mi.info LIKE 'USA:% 200%'\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ release dates (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ct.id:21!null\n" + - " │ │ └─ mc.company_type_id:18!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:19!null\n" + - " │ │ │ └─ mc.company_id:17!null\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.country_code:1\n" + - " │ │ │ └─ [us] (longtext)\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " │ └─ cc.movie_id:23\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 1990 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:24!null\n" + - " │ └─ mk.keyword_id:23!null\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mc.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ cc.movie_id:23\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:15!null\n" + + " │ └─ mk.keyword_id:5!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:6!null\n" + + " │ │ │ └─ mc.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:23\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:16!null\n" + + " │ └─ mi.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ mi.note LIKE '%internet%'\n" + + " │ │ │ └─ NOT\n" + + " │ │ │ └─ mi.info:2!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mi.info LIKE 'USA:% 199%'\n" + + " │ │ └─ mi.info LIKE 'USA:% 200%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:10!null\n" + + " │ │ │ └─ cc.movie_id:23\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.id:19!null\n" + + " │ │ └─ mc.company_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ ct.id:18!null\n" + + " │ └─ mc.company_type_id:12!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), tv movie (longtext), video movie (longtext), video game (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:21!null\n" + + " │ └─ cc.status_id:24!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ complete+verified (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(kt.kind) as movie_kind, min(t.title) as complete_us_internet_movie]\n" + @@ -15995,81 +15301,76 @@ WHERE cct1.kind = 'complete+verified' " ├─ SelectedExprs(MIN(kt.kind), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 1990)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ (cct1.id = cc.status_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (cct1.kind = 'complete+verified')\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (kt.kind HASH IN ('movie', 'tv movie', 'video movie', 'video game'))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'tv movie', 'video movie', 'video game'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(kt.kind) as movie_kind, min(t.title) as complete_us_internet_movie]\n" + @@ -16077,81 +15378,76 @@ WHERE cct1.kind = 'complete+verified' " ├─ SelectedExprs(MIN(kt.kind), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (t.production_year > 1990)\n" + - " │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ ├─ (cct1.id = cc.status_id)\n" + - " │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ ├─ (cct1.kind = 'complete+verified')\n" + - " │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ └─ columns: [movie_id status_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (kt.kind HASH IN ('movie', 'tv movie', 'video movie', 'video game'))\n" + - " │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: kind_type\n" + - " │ │ │ └─ columns: [id kind]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'release dates')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (ct.id = mc.company_type_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id company_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (cn.country_code = '[us]')\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id country_code]\n" + - " │ └─ TableAlias(ct)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_type\n" + - " │ └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mi.note LIKE '%internet%' AND (NOT(mi.info IS NULL))) AND (mi.info LIKE 'USA:% 199%' OR mi.info LIKE 'USA:% 200%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (cn.id = mc.company_id)) AND (ct.id = mc.company_type_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'tv movie', 'video movie', 'video game'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'release dates')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id status_id]\n" + "", }, { @@ -16210,7 +15506,7 @@ WHERE ci.note IN ('(voice)', ExpectedPlan: "Project\n" + " ├─ columns: [min(chn.name):0!null->voiced_char_name:0, min(n.name):1!null->voicing_actress_name:0, min(t.title):2!null->voiced_action_movie_jap_eng:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(chn.name:25!null), MIN(n.name:6!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(chn.name:27!null), MIN(n.name:6!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + @@ -16218,13 +15514,13 @@ WHERE ci.note IN ('(voice)', " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mi.movie_id:12!null\n" + + " │ │ │ │ └─ mi.movie_id:10!null\n" + " │ │ │ └─ Eq\n" + " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mc.movie_id:17!null\n" + + " │ │ │ └─ mc.movie_id:13!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ ci.movie_id:20!null\n" + + " │ │ └─ ci.movie_id:22!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ mk.movie_id:8!null\n" + @@ -16240,7 +15536,7 @@ WHERE ci.note IN ('(voice)', " └─ InnerJoin\n" + " ├─ Eq\n" + " │ ├─ rt.id:3!null\n" + - " │ └─ ci.role_id:23!null\n" + + " │ └─ ci.role_id:25!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.role:1!null\n" + @@ -16254,10 +15550,10 @@ WHERE ci.note IN ('(voice)', " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:5!null\n" + - " │ │ └─ ci.person_id:19!null\n" + + " │ │ └─ ci.person_id:21!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:5!null\n" + - " │ └─ an.person_id:26!null\n" + + " │ └─ an.person_id:28!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + @@ -16272,116 +15568,119 @@ WHERE ci.note IN ('(voice)', " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.movie_id:17!null\n" + - " │ │ │ └─ mk.movie_id:8!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mc.movie_id:13!null\n" + + " │ │ │ │ └─ mk.movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:10!null\n" + + " │ │ │ └─ mk.movie_id:8!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mi.movie_id:12!null\n" + + " │ │ ├─ ci.movie_id:22!null\n" + " │ │ └─ mk.movie_id:8!null\n" + " │ └─ Eq\n" + - " │ ├─ ci.movie_id:20!null\n" + - " │ └─ mk.movie_id:8!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:10!null\n" + - " │ │ └─ mk.keyword_id:9!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(hero (longtext), martial-arts (longtext), hand-to-hand-combat (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " │ ├─ k.id:15!null\n" + + " │ └─ mk.keyword_id:9!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:17!null\n" + - " │ │ └─ mi.movie_id:12!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:13!null\n" + + " │ │ │ └─ mi.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:10!null\n" + + " │ │ └─ ci.movie_id:22!null\n" + " │ └─ Eq\n" + - " │ ├─ mi.movie_id:12!null\n" + - " │ └─ ci.movie_id:20!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:15!null\n" + - " │ │ └─ mi.info_type_id:13!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ mi.info:2!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mi.info LIKE 'Japan:%201%'\n" + - " │ │ │ └─ mi.info LIKE 'USA:%201%'\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " │ ├─ it.id:17!null\n" + + " │ └─ mi.info_type_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mi.info:2!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mi.info LIKE 'Japan:%201%'\n" + + " │ │ └─ mi.info LIKE 'USA:%201%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ cn.id:27!null\n" + - " │ └─ mc.company_id:18!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:17!null\n" + - " │ │ └─ ci.movie_id:20!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:24!null\n" + - " │ │ │ └─ ci.person_role_id:21\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:19!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.movie_id:13!null\n" + + " │ │ └─ ci.movie_id:22!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:19!null\n" + + " │ └─ mc.company_id:14!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(hero (longtext), martial-arts (longtext), hand-to-hand-combat (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:26!null\n" + + " │ │ └─ ci.person_role_id:23\n" + + " │ ├─ Filter\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:21!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char_name, min(n.name) as voicing_actress_name, min(t.title) as voiced_action_movie_jap_eng]\n" + @@ -16413,67 +15712,64 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('hero', 'martial-arts', 'hand-to-hand-combat'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%201%' OR mi.info LIKE 'USA:%201%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%201%' OR mi.info LIKE 'USA:%201%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('hero', 'martial-arts', 'hand-to-hand-combat'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char_name, min(n.name) as voicing_actress_name, min(t.title) as voiced_action_movie_jap_eng]\n" + @@ -16505,67 +15801,64 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('hero', 'martial-arts', 'hand-to-hand-combat'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%201%' OR mi.info LIKE 'USA:%201%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%201%' OR mi.info LIKE 'USA:%201%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('hero', 'martial-arts', 'hand-to-hand-combat'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -16627,7 +15920,7 @@ WHERE ci.note IN ('(voice)', ExpectedPlan: "Project\n" + " ├─ columns: [min(chn.name):0!null->voiced_char_name:0, min(n.name):1!null->voicing_actress_name:0, min(t.title):2!null->kung_fu_panda:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(chn.name:25!null), MIN(n.name:6!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(chn.name:28!null), MIN(n.name:6!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + @@ -16635,13 +15928,13 @@ WHERE ci.note IN ('(voice)', " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mi.movie_id:12!null\n" + + " │ │ │ │ └─ mi.movie_id:10!null\n" + " │ │ │ └─ Eq\n" + " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mc.movie_id:17!null\n" + + " │ │ │ └─ mc.movie_id:13!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ ci.movie_id:20!null\n" + + " │ │ └─ ci.movie_id:23!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ mk.movie_id:8!null\n" + @@ -16665,7 +15958,7 @@ WHERE ci.note IN ('(voice)', " └─ InnerJoin\n" + " ├─ Eq\n" + " │ ├─ rt.id:3!null\n" + - " │ └─ ci.role_id:23!null\n" + + " │ └─ ci.role_id:26!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.role:1!null\n" + @@ -16679,10 +15972,10 @@ WHERE ci.note IN ('(voice)', " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:5!null\n" + - " │ │ └─ ci.person_id:19!null\n" + + " │ │ └─ ci.person_id:22!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:5!null\n" + - " │ └─ an.person_id:26!null\n" + + " │ └─ an.person_id:29!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ Eq\n" + @@ -16697,120 +15990,123 @@ WHERE ci.note IN ('(voice)', " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ mc.movie_id:17!null\n" + - " │ │ │ └─ mk.movie_id:8!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mc.movie_id:13!null\n" + + " │ │ │ │ └─ mk.movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:10!null\n" + + " │ │ │ └─ mk.movie_id:8!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mi.movie_id:12!null\n" + + " │ │ ├─ ci.movie_id:23!null\n" + " │ │ └─ mk.movie_id:8!null\n" + " │ └─ Eq\n" + - " │ ├─ ci.movie_id:20!null\n" + - " │ └─ mk.movie_id:8!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:10!null\n" + - " │ │ └─ mk.keyword_id:9!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(hero (longtext), martial-arts (longtext), hand-to-hand-combat (longtext), computer-animated-movie (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " │ ├─ k.id:15!null\n" + + " │ └─ mk.keyword_id:9!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:17!null\n" + - " │ │ └─ mi.movie_id:12!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:13!null\n" + + " │ │ │ └─ mi.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:10!null\n" + + " │ │ └─ ci.movie_id:23!null\n" + " │ └─ Eq\n" + - " │ ├─ mi.movie_id:12!null\n" + - " │ └─ ci.movie_id:20!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:15!null\n" + - " │ │ └─ mi.info_type_id:13!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ mi.info:2!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mi.info LIKE 'Japan:%201%'\n" + - " │ │ │ └─ mi.info LIKE 'USA:%201%'\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ release dates (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " │ ├─ it.id:17!null\n" + + " │ └─ mi.info_type_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mi.info:2!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mi.info LIKE 'Japan:%201%'\n" + + " │ │ └─ mi.info LIKE 'USA:%201%'\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ cn.id:27!null\n" + - " │ └─ mc.company_id:18!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:17!null\n" + - " │ │ └─ ci.movie_id:20!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:24!null\n" + - " │ │ │ └─ ci.person_role_id:21\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:19!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id]\n" + - " └─ Filter\n" + - " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cn.country_code:2\n" + - " │ │ └─ [us] (longtext)\n" + - " │ └─ Eq\n" + - " │ ├─ cn.name:1!null\n" + - " │ └─ DreamWorks Animation (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id name country_code]\n" + + " │ │ ├─ mc.movie_id:13!null\n" + + " │ │ └─ ci.movie_id:23!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:19!null\n" + + " │ └─ mc.company_id:14!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(hero (longtext), martial-arts (longtext), hand-to-hand-combat (longtext), computer-animated-movie (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ release dates (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ cn.country_code:2\n" + + " │ │ │ └─ [us] (longtext)\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.name:1!null\n" + + " │ │ └─ DreamWorks Animation (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:27!null\n" + + " │ │ └─ ci.person_role_id:24\n" + + " │ ├─ Filter\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:22!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char_name, min(n.name) as voicing_actress_name, min(t.title) as kung_fu_panda]\n" + @@ -16842,67 +16138,64 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('hero', 'martial-arts', 'hand-to-hand-combat', 'computer-animated-movie'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%201%' OR mi.info LIKE 'USA:%201%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%201%' OR mi.info LIKE 'USA:%201%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ ((cn.country_code = '[us]') AND (cn.name = 'DreamWorks Animation'))\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id name country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('hero', 'martial-arts', 'hand-to-hand-combat', 'computer-animated-movie'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.country_code = '[us]') AND (cn.name = 'DreamWorks Animation'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char_name, min(n.name) as voicing_actress_name, min(t.title) as kung_fu_panda]\n" + @@ -16934,67 +16227,64 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('hero', 'martial-arts', 'hand-to-hand-combat', 'computer-animated-movie'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + " └─ InnerJoin\n" + - " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%201%' OR mi.info LIKE 'USA:%201%'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'release dates')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " ├─ (((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%201%' OR mi.info LIKE 'USA:%201%'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + " └─ InnerJoin\n" + - " ├─ (cn.id = mc.company_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = ci.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ ((cn.country_code = '[us]') AND (cn.name = 'DreamWorks Animation'))\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id name country_code]\n" + + " ├─ ((mc.movie_id = ci.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('hero', 'martial-arts', 'hand-to-hand-combat', 'computer-animated-movie'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'release dates')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.country_code = '[us]') AND (cn.name = 'DreamWorks Animation'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -17045,321 +16335,271 @@ WHERE ci.note IN ('(writer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->male_writer:0, min(t.title):3!null->violent_movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:13!null), MIN(mi_idx.info:4!null), MIN(n.name:18!null), MIN(t.title:21!null)\n" + + " ├─ select: MIN(mi.info:12!null), MIN(mi_idx.info:9!null), MIN(n.name:3!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:20!null\n" + - " │ │ │ │ └─ mi.movie_id:11!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:10!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:20!null\n" + - " │ │ │ └─ mi_idx.movie_id:2!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi_idx.movie_id:7!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:20!null\n" + - " │ │ └─ ci.movie_id:15!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ ci.movie_id:20!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:20!null\n" + - " │ └─ mk.movie_id:9!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:17!null\n" + - " │ │ └─ ci.person_id:14!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:3!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ votes (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:1!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:11!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:2!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:2!null\n" + - " │ │ │ └─ mk.movie_id:9!null\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi_idx.movie_id:2!null, mi_idx.movie_id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.movie_id:6!null, mk.movie_id:4!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:5!null\n" + - " │ │ │ └─ mk.keyword_id:10!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ TUPLE(murder (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:5!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:7!null\n" + - " │ │ │ └─ mi.info_type_id:12!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ genres (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (8,9)\n" + - " │ │ │ └─ tableId: 2\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it1.id:7!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.info_type_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:11!null\n" + - " │ │ │ │ └─ mk.movie_id:9!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ └─ Horror (longtext)\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:11!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:14!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.gender:2\n" + - " │ │ └─ m (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:11!null, mi_idx.movie_id:2!null, ci.movie_id:15!null, mk.movie_id:9!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:5!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:2!null\n" + + " │ └─ ci.person_id:19!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:2\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:20!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:10!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:7!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:13!null\n" + + " │ └─ mk.keyword_id:6!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:20!null\n" + + " │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:10!null\n" + + " │ │ └─ mi_idx.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:15!null\n" + + " │ └─ mi_idx.info_type_id:8!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:20!null\n" + + " │ │ └─ mi.movie_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:17!null\n" + + " │ └─ mi.info_type_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ Horror (longtext)\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (8,9)\n" + + " │ └─ tableId: 2\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as male_writer, min(t.title) as violent_movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mi_idx.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mi.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'blood', 'gore', 'death', 'female-nudity'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info = 'Horror')\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info = 'Horror')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'blood', 'gore', 'death', 'female-nudity'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as male_writer, min(t.title) as violent_movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mi_idx.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mi.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'blood', 'gore', 'death', 'female-nudity'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info = 'Horror')\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info = 'Horror')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'blood', 'gore', 'death', 'female-nudity'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -17412,337 +16652,287 @@ WHERE ci.note IN ('(writer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->male_writer:0, min(t.title):3!null->violent_movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:13!null), MIN(mi_idx.info:4!null), MIN(n.name:18!null), MIN(t.title:21!null)\n" + + " ├─ select: MIN(mi.info:13!null), MIN(mi_idx.info:10!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:20!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + " │ │ │ │ └─ mi.movie_id:11!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:20!null\n" + - " │ │ │ └─ mi_idx.movie_id:2!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi_idx.movie_id:8!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:20!null\n" + - " │ │ └─ ci.movie_id:15!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ ci.movie_id:21!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:20!null\n" + - " │ └─ mk.movie_id:9!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:17!null\n" + - " │ │ └─ ci.person_id:14!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:3!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ votes (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:1!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:11!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:2!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:2!null\n" + - " │ │ │ └─ mk.movie_id:9!null\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi_idx.movie_id:2!null, mi_idx.movie_id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.movie_id:6!null, mk.movie_id:4!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:5!null\n" + - " │ │ │ └─ mk.keyword_id:10!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ TUPLE(murder (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:5!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:7!null\n" + - " │ │ │ └─ mi.info_type_id:12!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ genres (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (8,9)\n" + - " │ │ │ └─ tableId: 2\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it1.id:7!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.info_type_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:11!null\n" + - " │ │ │ │ └─ mk.movie_id:9!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ └─ Horror (longtext)\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:11!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:14!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.gender:2\n" + - " │ │ └─ m (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:11!null, mi_idx.movie_id:2!null, ci.movie_id:15!null, mk.movie_id:9!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ GreaterThan\n" + + " │ │ │ │ ├─ t.production_year:2\n" + + " │ │ │ │ └─ 2010 (int)\n" + + " │ │ │ └─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ Vampire (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.title:1!null\n" + + " │ │ └─ Vampireÿ (longtext)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:3!null\n" + + " │ └─ ci.person_id:20!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:2\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (int)\n" + - " │ │ └─ GreaterThanOrEqual\n" + - " │ │ ├─ t.title:1!null\n" + - " │ │ └─ Vampire (longtext)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.title:1!null\n" + - " │ └─ Vampireÿ (longtext)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:21!null\n" + + " │ │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:11!null\n" + + " │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:8!null\n" + + " │ │ └─ mk.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:14!null\n" + + " │ └─ mk.keyword_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:21!null\n" + + " │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:11!null\n" + + " │ │ └─ mi_idx.movie_id:8!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:16!null\n" + + " │ └─ mi_idx.info_type_id:9!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:21!null\n" + + " │ │ └─ mi.movie_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:18!null\n" + + " │ └─ mi.info_type_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ Horror (longtext)\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (8,9)\n" + + " │ └─ tableId: 2\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as male_writer, min(t.title) as violent_movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mi_idx.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mi.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'blood', 'gore', 'death', 'female-nudity'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info = 'Horror')\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (((t.production_year > 2010) AND (t.title >= 'Vampire')) AND (t.title <= 'Vampireÿ'))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (((t.production_year > 2010) AND (t.title >= 'Vampire')) AND (t.title <= 'Vampireÿ'))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info = 'Horror')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'blood', 'gore', 'death', 'female-nudity'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as male_writer, min(t.title) as violent_movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mi_idx.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mi.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'blood', 'gore', 'death', 'female-nudity'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info = 'Horror')\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (((t.production_year > 2010) AND (t.title >= 'Vampire')) AND (t.title <= 'Vampireÿ'))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (((t.production_year > 2010) AND (t.title >= 'Vampire')) AND (t.title <= 'Vampireÿ'))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info = 'Horror')\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'blood', 'gore', 'death', 'female-nudity'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -17800,321 +16990,271 @@ WHERE ci.note IN ('(writer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->male_writer:0, min(t.title):3!null->violent_movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:13!null), MIN(mi_idx.info:4!null), MIN(n.name:18!null), MIN(t.title:21!null)\n" + + " ├─ select: MIN(mi.info:12!null), MIN(mi_idx.info:9!null), MIN(n.name:3!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:20!null\n" + - " │ │ │ │ └─ mi.movie_id:11!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi.movie_id:10!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:20!null\n" + - " │ │ │ └─ mi_idx.movie_id:2!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi_idx.movie_id:7!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:20!null\n" + - " │ │ └─ ci.movie_id:15!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ ci.movie_id:20!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:20!null\n" + - " │ └─ mk.movie_id:9!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:17!null\n" + - " │ │ └─ ci.person_id:14!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:3!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ votes (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:1!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:11!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:2!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:2!null\n" + - " │ │ │ └─ mk.movie_id:9!null\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi_idx.movie_id:2!null, mi_idx.movie_id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.movie_id:6!null, mk.movie_id:4!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:5!null\n" + - " │ │ │ └─ mk.keyword_id:10!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:5!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:7!null\n" + - " │ │ │ └─ mi.info_type_id:12!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ genres (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (8,9)\n" + - " │ │ │ └─ tableId: 2\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it1.id:7!null)\n" + - " │ │ ├─ right-key: TUPLE(mi.info_type_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:11!null\n" + - " │ │ │ │ └─ mk.movie_id:9!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ └─ TUPLE(Horror (longtext), Action (longtext), Sci-Fi (longtext), Thriller (longtext), Crime (longtext), War (longtext))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:11!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:14!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.gender:2\n" + - " │ │ └─ m (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:11!null, mi_idx.movie_id:2!null, ci.movie_id:15!null, mk.movie_id:9!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:5!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:2!null\n" + + " │ └─ ci.person_id:19!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:2\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:20!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:10!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:7!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:13!null\n" + + " │ └─ mk.keyword_id:6!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:20!null\n" + + " │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:10!null\n" + + " │ │ └─ mi_idx.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:15!null\n" + + " │ └─ mi_idx.info_type_id:8!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:20!null\n" + + " │ │ └─ mi.movie_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:17!null\n" + + " │ └─ mi.info_type_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Horror (longtext), Action (longtext), Sci-Fi (longtext), Thriller (longtext), Crime (longtext), War (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (8,9)\n" + + " │ └─ tableId: 2\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as male_writer, min(t.title) as violent_movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mi_idx.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mi.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as male_writer, min(t.title) as violent_movie_title]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ ((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mi_idx.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mi.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it1.id)\n" + - " │ │ ├─ right-key: (mi.info_type_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mi.movie_id = mk.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mi.movie_id) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -18176,158 +17316,174 @@ WHERE cct1.kind = 'cast' ExpectedPlan: "Project\n" + " ├─ columns: [min(chn.name):0!null->character_name:0, min(mi_idx.info):1!null->rating:0, min(n.name):2!null->playing_actor:0, min(t.title):3!null->complete_hero_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(chn.name:22!null), MIN(mi_idx.info:15!null), MIN(n.name:28!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(chn.name:21!null), MIN(mi_idx.info:10!null), MIN(n.name:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ n.id:27!null\n" + - " │ └─ ci.person_id:18!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ │ │ └─ ci.movie_id:19!null\n" + + " │ │ │ │ │ ├─ kt.id:11!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ │ └─ cc.movie_id:8\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:6!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ └─ mi_idx.movie_id:13!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:18!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:23!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:19!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:13!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ cast (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ │ │ └─ tableId: 2\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ movie (longtext)\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.id:16!null\n" + - " │ │ │ │ └─ mi_idx.info_type_id:14!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ │ └─ 7.0 (longtext)\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ rating (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:21!null\n" + - " │ │ │ └─ ci.person_role_id:20\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ chn.name:1!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ chn.name LIKE '%man%'\n" + - " │ │ │ └─ chn.name LIKE '%Man%'\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:25!null\n" + - " │ │ └─ mk.keyword_id:24!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext), magnet (longtext), web (longtext), claw (longtext), laser (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id name]\n" + + " │ │ └─ cc.movie_id:26\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mi_idx.movie_id:8!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:4!null\n" + + " │ └─ ci.person_id:17!null\n" + + " ├─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:6!null\n" + + " │ │ │ │ └─ ci.movie_id:18!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:6!null\n" + + " │ │ │ └─ cc.movie_id:26\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:6!null\n" + + " │ │ └─ mi_idx.movie_id:8!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:13!null\n" + + " │ └─ mk.keyword_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:18!null\n" + + " │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cc.movie_id:26\n" + + " │ │ └─ mi_idx.movie_id:8!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:15!null\n" + + " │ └─ mi_idx.info_type_id:9!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 7.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext), magnet (longtext), web (longtext), claw (longtext), laser (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:18!null\n" + + " │ │ └─ cc.movie_id:26\n" + + " │ └─ Eq\n" + + " │ ├─ chn.id:20!null\n" + + " │ └─ ci.person_role_id:19\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ chn.name:1!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ chn.name LIKE '%man%'\n" + + " │ │ └─ chn.name LIKE '%Man%'\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:22!null\n" + + " │ └─ cc.status_id:28!null\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:24!null\n" + + " │ └─ cc.subject_id:27!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as character_name, min(mi_idx.info) as rating, min(n.name) as playing_actor, min(t.title) as complete_hero_movie]\n" + @@ -18335,91 +17491,87 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(chn.name), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (n.id = ci.person_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ci.movie_id = cc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '7.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id name]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (cc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '7.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as character_name, min(mi_idx.info) as rating, min(n.name) as playing_actor, min(t.title) as complete_hero_movie]\n" + @@ -18427,91 +17579,87 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(chn.name), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (n.id = ci.person_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ci.movie_id = cc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '7.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id name]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (cc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '7.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -18566,158 +17714,174 @@ WHERE cct1.kind = 'cast' ExpectedPlan: "Project\n" + " ├─ columns: [min(chn.name):0!null->character_name:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->complete_hero_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(chn.name:22!null), MIN(mi_idx.info:15!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(chn.name:20!null), MIN(mi_idx.info:9!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ n.id:27!null\n" + - " │ └─ ci.person_id:18!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ │ │ └─ ci.movie_id:19!null\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ └─ mi_idx.movie_id:13!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:23!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:19!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:13!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ │ └─ 2005 (int)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ cast (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ │ │ └─ tableId: 2\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ movie (longtext)\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.id:16!null\n" + - " │ │ │ │ └─ mi_idx.info_type_id:14!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ mi_idx.info:2!null\n" + - " │ │ │ │ │ └─ 8.0 (longtext)\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ rating (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:21!null\n" + - " │ │ │ └─ ci.person_role_id:20\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ chn.name:1!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ chn.name LIKE '%man%'\n" + - " │ │ │ └─ chn.name LIKE '%Man%'\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:25!null\n" + - " │ │ └─ mk.keyword_id:24!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), marvel-comics (longtext), based-on-comic (longtext), fight (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id]\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ kt.id:10!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:17!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ cc.movie_id:25\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mi_idx.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:4!null\n" + + " │ └─ ci.person_id:16!null\n" + + " ├─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:5!null\n" + + " │ │ │ │ └─ ci.movie_id:17!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:5!null\n" + + " │ │ │ └─ cc.movie_id:25\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mi_idx.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:12!null\n" + + " │ └─ mk.keyword_id:6!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:17!null\n" + + " │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cc.movie_id:25\n" + + " │ │ └─ mi_idx.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:14!null\n" + + " │ └─ mi_idx.info_type_id:8!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), marvel-comics (longtext), based-on-comic (longtext), fight (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:17!null\n" + + " │ │ └─ cc.movie_id:25\n" + + " │ └─ Eq\n" + + " │ ├─ chn.id:19!null\n" + + " │ └─ ci.person_role_id:18\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ chn.name:1!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ chn.name LIKE '%man%'\n" + + " │ │ └─ chn.name LIKE '%Man%'\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:21!null\n" + + " │ └─ cc.status_id:27!null\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:23!null\n" + + " │ └─ cc.subject_id:26!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as character_name, min(mi_idx.info) as rating, min(t.title) as complete_hero_movie]\n" + @@ -18725,91 +17889,87 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(chn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (n.id = ci.person_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ci.movie_id = cc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '8.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'fight'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (cc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '8.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'fight'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as character_name, min(mi_idx.info) as rating, min(t.title) as complete_hero_movie]\n" + @@ -18817,91 +17977,87 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(chn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (n.id = ci.person_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ci.movie_id = cc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi_idx.info > '8.0')\n" + - " │ │ │ │ └─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'fight'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (cc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '8.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'fight'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -18961,154 +18117,170 @@ WHERE cct1.kind = 'cast' ExpectedPlan: "Project\n" + " ├─ columns: [min(chn.name):0!null->character_name:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->complete_hero_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(chn.name:22!null), MIN(mi_idx.info:15!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(chn.name:20!null), MIN(mi_idx.info:9!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ n.id:27!null\n" + - " │ └─ ci.person_id:18!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ │ │ └─ ci.movie_id:19!null\n" + + " │ │ │ │ │ ├─ kt.id:10!null\n" + + " │ │ │ │ │ └─ t.kind_id:2!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ │ └─ cc.movie_id:8\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:23!null\n" + - " │ │ │ └─ mi_idx.movie_id:13!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:17!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:23!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.movie_id:19!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:13!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ cast (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ │ │ └─ tableId: 2\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ movie (longtext)\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.id:16!null\n" + - " │ │ │ │ └─ mi_idx.info_type_id:14!null\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ rating (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:21!null\n" + - " │ │ │ └─ ci.person_role_id:20\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ chn.name:1!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ chn.name LIKE '%man%'\n" + - " │ │ │ └─ chn.name LIKE '%Man%'\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:25!null\n" + - " │ │ └─ mk.keyword_id:24!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext), magnet (longtext), web (longtext), claw (longtext), laser (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id]\n" + + " │ │ └─ cc.movie_id:25\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mi_idx.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:4!null\n" + + " │ └─ ci.person_id:16!null\n" + + " ├─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:5!null\n" + + " │ │ │ │ └─ ci.movie_id:17!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:5!null\n" + + " │ │ │ └─ cc.movie_id:25\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mi_idx.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:12!null\n" + + " │ └─ mk.keyword_id:6!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:17!null\n" + + " │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cc.movie_id:25\n" + + " │ │ └─ mi_idx.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:14!null\n" + + " │ └─ mi_idx.info_type_id:8!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ movie (longtext)\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext), magnet (longtext), web (longtext), claw (longtext), laser (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:17!null\n" + + " │ │ └─ cc.movie_id:25\n" + + " │ └─ Eq\n" + + " │ ├─ chn.id:19!null\n" + + " │ └─ ci.person_role_id:18\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ chn.name:1!null IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ chn.name LIKE '%man%'\n" + + " │ │ └─ chn.name LIKE '%Man%'\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:21!null\n" + + " │ └─ cc.status_id:27!null\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:23!null\n" + + " │ └─ cc.subject_id:26!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as character_name, min(mi_idx.info) as rating, min(t.title) as complete_hero_movie]\n" + @@ -19116,89 +18288,85 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(chn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (n.id = ci.person_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ci.movie_id = cc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (cc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as character_name, min(mi_idx.info) as rating, min(t.title) as complete_hero_movie]\n" + @@ -19206,89 +18374,85 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(chn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (n.id = ci.person_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ci.movie_id = cc.movie_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ cct2.kind LIKE '%complete%'\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind = 'movie')\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it2.info = 'rating')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ TableAlias(n)\n" + - " └─ Table\n" + - " ├─ name: name\n" + - " └─ columns: [id]\n" + + " ├─ (((((kt.id = t.kind_id) AND (t.id = mk.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = cc.movie_id)) AND (t.id = mi_idx.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.movie_id = ci.movie_id) AND (mk.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi_idx.movie_id) AND (cc.movie_id = mi_idx.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind = 'movie')\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence', 'magnet', 'web', 'claw', 'laser'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = cc.movie_id) AND (chn.id = ci.person_role_id))\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id person_role_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(chn.name IS NULL)) AND (chn.name LIKE '%man%' OR chn.name LIKE '%Man%'))\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ cct2.kind LIKE '%complete%'\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -19349,423 +18513,378 @@ WHERE cct1.kind IN ('cast', ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->producing_company:0, min(lt.link):1!null->link_type:0, min(t.title):2!null->complete_western_sequel:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(lt.link:5!null), MIN(t.title:27!null)\n" + + " ├─ select: MIN(cn.name:20!null), MIN(lt.link:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ ml.movie_id:13!null\n" + - " │ │ │ │ │ └─ t.id:26!null\n" + + " │ │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ │ └─ t.id:0!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ t.id:26!null\n" + - " │ │ │ │ └─ mk.movie_id:15!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:26!null\n" + - " │ │ │ └─ mc.movie_id:19!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mi.movie_id:17!null\n" + - " │ │ └─ t.id:26!null\n" + + " │ │ ├─ mi.movie_id:7!null\n" + + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:26!null\n" + - " │ └─ cc.movie_id:23\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct1.id:0!null\n" + - " │ │ └─ cc.subject_id:24!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ └─ TUPLE(cast (longtext), crew (longtext))\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cct1.id:0!null)\n" + - " │ ├─ right-key: TUPLE(cc.subject_id:22!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct2.id:2!null\n" + - " │ │ └─ cc.status_id:25!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cct2.kind:1!null\n" + - " │ │ │ └─ complete (longtext)\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ ├─ columns: [id kind]\n" + - " │ │ ├─ colSet: (7,8)\n" + - " │ │ └─ tableId: 3\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cct2.id:2!null)\n" + - " │ ├─ right-key: TUPLE(cc.status_id:21!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ lt.id:4!null\n" + - " │ │ └─ ml.link_type_id:14!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(lt.id:4!null)\n" + - " │ ├─ right-key: TUPLE(ml.link_type_id:8!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:16!null\n" + - " │ │ └─ k.id:6!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ sequel (longtext)\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:6!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:8!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_type_id:21!null\n" + - " │ │ └─ ct.id:8!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ └─ production companies (longtext)\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ct.id:8!null)\n" + - " │ ├─ right-key: TUPLE(mc.company_type_id:11!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_id:20!null\n" + - " │ │ └─ cn.id:10!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ cn.name LIKE '%Film%'\n" + - " │ │ │ └─ cn.name LIKE '%Warner%'\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cn.id:10!null)\n" + - " │ ├─ right-key: TUPLE(mc.company_id:7!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:13!null\n" + - " │ │ │ └─ mk.movie_id:15!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:15!null\n" + - " │ │ │ │ └─ mi.movie_id:17!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ mi.info:1!null\n" + - " │ │ │ │ └─ TUPLE(Sweden (longtext), Germany (longtext), Swedish (longtext), German (longtext))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note:3 IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:17!null]\n" + - " │ │ ├─ colSet: (23-27)\n" + - " │ │ ├─ tableId: 8\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:19!null]\n" + - " │ ├─ colSet: (1-4)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ml.movie_id:13!null, mk.movie_id:15!null, mc.movie_id:19!null, mi.movie_id:17!null, cc.movie_id:23)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 1950 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ lt.id:13!null\n" + + " │ │ │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 1950 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2000 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ │ │ └─ k.id:15!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:5!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.movie_id:9!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi.movie_id:7!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Germany (longtext), Swedish (longtext), German (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.company_type_id:11!null\n" + + " │ │ │ └─ ct.id:17!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.company_id:10!null\n" + + " │ │ └─ cn.id:19!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:9!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ sequel (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ cn.country_code:2\n" + + " │ │ │ └─ [pl] (longtext)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ cn.name LIKE '%Film%'\n" + + " │ │ └─ cn.name LIKE '%Warner%'\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:22!null\n" + + " │ └─ cc.status_id:28!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ complete (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:24!null\n" + + " │ └─ cc.subject_id:27!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ TUPLE(cast (longtext), crew (longtext))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(lt.link) as link_type, min(t.title) as complete_western_sequel]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (cct1.id = cc.subject_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct1.id)\n" + - " │ ├─ right-key: (cc.subject_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (cct2.id = cc.status_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct2.kind = 'complete')\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct2.id)\n" + - " │ ├─ right-key: (cc.status_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (lt.id)\n" + - " │ ├─ right-key: (ml.link_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ct.id)\n" + - " │ ├─ right-key: (mc.company_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_id = cn.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cn.id)\n" + - " │ ├─ right-key: (mc.company_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mi.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ columns: [movie_id subject_id status_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id, mi.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id)) AND (ml.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id)) AND (mk.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.company_type_id = ct.id) AND (mc.company_id = cn.id)) AND (mc.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(lt.link) as link_type, min(t.title) as complete_western_sequel]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (cct1.id = cc.subject_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct1.id)\n" + - " │ ├─ right-key: (cc.subject_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (cct2.id = cc.status_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct2.kind = 'complete')\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct2.id)\n" + - " │ ├─ right-key: (cc.status_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (lt.id)\n" + - " │ ├─ right-key: (ml.link_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ct.id)\n" + - " │ ├─ right-key: (mc.company_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_id = cn.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cn.id)\n" + - " │ ├─ right-key: (mc.company_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mi.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ columns: [movie_id subject_id status_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id, mi.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2000))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id)) AND (ml.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id)) AND (mk.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.company_type_id = ct.id) AND (mc.company_id = cn.id)) AND (mc.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -19826,419 +18945,374 @@ WHERE cct1.kind IN ('cast', ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->producing_company:0, min(lt.link):1!null->link_type:0, min(t.title):2!null->complete_western_sequel:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(lt.link:5!null), MIN(t.title:27!null)\n" + + " ├─ select: MIN(cn.name:20!null), MIN(lt.link:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ ml.movie_id:13!null\n" + - " │ │ │ │ │ └─ t.id:26!null\n" + + " │ │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ │ └─ t.id:0!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ t.id:26!null\n" + - " │ │ │ │ └─ mk.movie_id:15!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:26!null\n" + - " │ │ │ └─ mc.movie_id:19!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mi.movie_id:17!null\n" + - " │ │ └─ t.id:26!null\n" + + " │ │ ├─ mi.movie_id:7!null\n" + + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:26!null\n" + - " │ └─ cc.movie_id:23\n" + - " ├─ HashJoin\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + " │ ├─ Eq\n" + - " │ │ ├─ cct1.id:0!null\n" + - " │ │ └─ cc.subject_id:24!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ └─ TUPLE(cast (longtext), crew (longtext))\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cct1.id:0!null)\n" + - " │ ├─ right-key: TUPLE(cc.subject_id:22!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct2.id:2!null\n" + - " │ │ └─ cc.status_id:25!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cct2.kind:1!null\n" + - " │ │ │ └─ complete (longtext)\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ ├─ columns: [id kind]\n" + - " │ │ ├─ colSet: (7,8)\n" + - " │ │ └─ tableId: 3\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cct2.id:2!null)\n" + - " │ ├─ right-key: TUPLE(cc.status_id:21!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ lt.id:4!null\n" + - " │ │ └─ ml.link_type_id:14!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(lt.id:4!null)\n" + - " │ ├─ right-key: TUPLE(ml.link_type_id:8!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:16!null\n" + - " │ │ └─ k.id:6!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ sequel (longtext)\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:6!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:8!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_type_id:21!null\n" + - " │ │ └─ ct.id:8!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ └─ production companies (longtext)\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ct.id:8!null)\n" + - " │ ├─ right-key: TUPLE(mc.company_type_id:11!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_id:20!null\n" + - " │ │ └─ cn.id:10!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ cn.name LIKE '%Film%'\n" + - " │ │ │ └─ cn.name LIKE '%Warner%'\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cn.id:10!null)\n" + - " │ ├─ right-key: TUPLE(mc.company_id:7!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:13!null\n" + - " │ │ │ └─ mk.movie_id:15!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:15!null\n" + - " │ │ │ │ └─ mi.movie_id:17!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ mi.info:1!null\n" + - " │ │ │ │ └─ TUPLE(Sweden (longtext), Germany (longtext), Swedish (longtext), German (longtext))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note:3 IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:17!null]\n" + - " │ │ ├─ colSet: (23-27)\n" + - " │ │ ├─ tableId: 8\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:19!null]\n" + - " │ ├─ colSet: (1-4)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ml.movie_id:13!null, mk.movie_id:15!null, mc.movie_id:19!null, mi.movie_id:17!null, cc.movie_id:23)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 1998 (int)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1998 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ lt.id:13!null\n" + + " │ │ │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ │ │ └─ k.id:15!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:5!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.movie_id:9!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi.movie_id:7!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Germany (longtext), Swedish (longtext), German (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.company_type_id:11!null\n" + + " │ │ │ └─ ct.id:17!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.company_id:10!null\n" + + " │ │ └─ cn.id:19!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:9!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ sequel (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ cn.country_code:2\n" + + " │ │ │ └─ [pl] (longtext)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ cn.name LIKE '%Film%'\n" + + " │ │ └─ cn.name LIKE '%Warner%'\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:22!null\n" + + " │ └─ cc.status_id:28!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ complete (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:24!null\n" + + " │ └─ cc.subject_id:27!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ TUPLE(cast (longtext), crew (longtext))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(lt.link) as link_type, min(t.title) as complete_western_sequel]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (cct1.id = cc.subject_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct1.id)\n" + - " │ ├─ right-key: (cc.subject_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (cct2.id = cc.status_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct2.kind = 'complete')\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct2.id)\n" + - " │ ├─ right-key: (cc.status_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (lt.id)\n" + - " │ ├─ right-key: (ml.link_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ct.id)\n" + - " │ ├─ right-key: (mc.company_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_id = cn.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cn.id)\n" + - " │ ├─ right-key: (mc.company_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mi.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ columns: [movie_id subject_id status_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id, mi.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year = 1998)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year = 1998)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id)) AND (ml.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id)) AND (mk.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.company_type_id = ct.id) AND (mc.company_id = cn.id)) AND (mc.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(lt.link) as link_type, min(t.title) as complete_western_sequel]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (cct1.id = cc.subject_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct1.id)\n" + - " │ ├─ right-key: (cc.subject_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (cct2.id = cc.status_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct2.kind = 'complete')\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct2.id)\n" + - " │ ├─ right-key: (cc.status_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (lt.id)\n" + - " │ ├─ right-key: (ml.link_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ct.id)\n" + - " │ ├─ right-key: (mc.company_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_id = cn.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cn.id)\n" + - " │ ├─ right-key: (mc.company_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mi.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ columns: [movie_id subject_id status_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id, mi.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (t.production_year = 1998)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year = 1998)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id)) AND (ml.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id)) AND (mk.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.company_type_id = ct.id) AND (mc.company_id = cn.id)) AND (mc.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -20303,427 +19377,382 @@ WHERE cct1.kind = 'cast' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->producing_company:0, min(lt.link):1!null->link_type:0, min(t.title):2!null->complete_western_sequel:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:11!null), MIN(lt.link:5!null), MIN(t.title:27!null)\n" + + " ├─ select: MIN(cn.name:20!null), MIN(lt.link:14!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ ml.movie_id:13!null\n" + - " │ │ │ │ │ └─ t.id:26!null\n" + + " │ │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ │ └─ t.id:0!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ t.id:26!null\n" + - " │ │ │ │ └─ mk.movie_id:15!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:26!null\n" + - " │ │ │ └─ mc.movie_id:19!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mi.movie_id:17!null\n" + - " │ │ └─ t.id:26!null\n" + + " │ │ ├─ mi.movie_id:7!null\n" + + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:26!null\n" + - " │ └─ cc.movie_id:23\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct1.id:0!null\n" + - " │ │ └─ cc.subject_id:24!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ └─ cast (longtext)\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cct1.id:0!null)\n" + - " │ ├─ right-key: TUPLE(cc.subject_id:22!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct2.id:2!null\n" + - " │ │ └─ cc.status_id:25!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ ├─ cct2.kind:1!null\n" + - " │ │ │ │ └─ complete (longtext)\n" + - " │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ ├─ cct2.kind:1!null\n" + - " │ │ │ └─ completeÿ (longtext)\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ ├─ columns: [id kind]\n" + - " │ │ ├─ colSet: (7,8)\n" + - " │ │ └─ tableId: 3\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cct2.id:2!null)\n" + - " │ ├─ right-key: TUPLE(cc.status_id:21!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ lt.id:4!null\n" + - " │ │ └─ ml.link_type_id:14!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(lt.id:4!null)\n" + - " │ ├─ right-key: TUPLE(ml.link_type_id:8!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:16!null\n" + - " │ │ └─ k.id:6!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ └─ sequel (longtext)\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(k.id:6!null)\n" + - " │ ├─ right-key: TUPLE(mk.keyword_id:8!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_type_id:21!null\n" + - " │ │ └─ ct.id:8!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.kind:1!null\n" + - " │ │ │ └─ production companies (longtext)\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ct.id:8!null)\n" + - " │ ├─ right-key: TUPLE(mc.company_type_id:11!null)\n" + - " │ └─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mc.company_id:20!null\n" + - " │ │ └─ cn.id:10!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [pl] (longtext)\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ cn.name LIKE '%Film%'\n" + - " │ │ │ └─ cn.name LIKE '%Warner%'\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(cn.id:10!null)\n" + - " │ ├─ right-key: TUPLE(mc.company_id:7!null)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:13!null\n" + - " │ │ │ └─ mk.movie_id:15!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:15!null\n" + - " │ │ │ │ └─ mi.movie_id:17!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ mi.info:1!null\n" + - " │ │ │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), English (longtext))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note:3 IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ keys: [mi.movie_id:17!null]\n" + - " │ │ ├─ colSet: (23-27)\n" + - " │ │ ├─ tableId: 8\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ keys: [mc.movie_id:19!null]\n" + - " │ ├─ colSet: (1-4)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(ml.movie_id:13!null, mk.movie_id:15!null, mc.movie_id:19!null, mi.movie_id:17!null, cc.movie_id:23)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 1950 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (smallint)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ lt.id:13!null\n" + + " │ │ │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:3!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:3!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.movie_id:3!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 1950 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2010 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mk.keyword_id:6!null\n" + + " │ │ │ │ └─ k.id:15!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:5!null\n" + + " │ │ │ └─ mc.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:5!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.movie_id:9!null\n" + + " │ │ └─ mi.movie_id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi.movie_id:7!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), English (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.company_type_id:11!null\n" + + " │ │ │ └─ ct.id:17!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mc.company_id:10!null\n" + + " │ │ └─ cn.id:19!null\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:9!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ mc.note:3 IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ sequel (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ct.kind:1!null\n" + + " │ │ └─ production companies (longtext)\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ cn.country_code:2\n" + + " │ │ │ └─ [pl] (longtext)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ cn.name LIKE '%Film%'\n" + + " │ │ └─ cn.name LIKE '%Warner%'\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:22!null\n" + + " │ └─ cc.status_id:28!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ cct2.kind:1!null\n" + + " │ │ │ └─ complete (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ completeÿ (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:24!null\n" + + " │ └─ cc.subject_id:27!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(lt.link) as link_type, min(t.title) as complete_western_sequel]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (cct1.id = cc.subject_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct1.id)\n" + - " │ ├─ right-key: (cc.subject_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (cct2.id = cc.status_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((cct2.kind >= 'complete') AND (cct2.kind <= 'completeÿ'))\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct2.id)\n" + - " │ ├─ right-key: (cc.status_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (lt.id)\n" + - " │ ├─ right-key: (ml.link_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ct.id)\n" + - " │ ├─ right-key: (mc.company_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_id = cn.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cn.id)\n" + - " │ ├─ right-key: (mc.company_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mi.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'English'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ columns: [movie_id subject_id status_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id, mi.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 1950) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id)) AND (ml.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id)) AND (mk.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'English'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.company_type_id = ct.id) AND (mc.company_id = cn.id)) AND (mc.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((cct2.kind >= 'complete') AND (cct2.kind <= 'completeÿ'))\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as producing_company, min(lt.link) as link_type, min(t.title) as complete_western_sequel]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(cn.name), MIN(lt.link), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((ml.movie_id = t.id) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id)) AND (mi.movie_id = t.id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (cct1.id = cc.subject_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ └─ TableAlias(cct1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct1.id)\n" + - " │ ├─ right-key: (cc.subject_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (cct2.id = cc.status_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((cct2.kind >= 'complete') AND (cct2.kind <= 'completeÿ'))\n" + - " │ │ └─ TableAlias(cct2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: comp_cast_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cct2.id)\n" + - " │ ├─ right-key: (cc.status_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (lt.id)\n" + - " │ ├─ right-key: (ml.link_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (k.keyword = 'sequel')\n" + - " │ │ └─ TableAlias(k)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: keyword\n" + - " │ │ └─ columns: [id keyword]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (k.id)\n" + - " │ ├─ right-key: (mk.keyword_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_type_id = ct.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ct.kind = 'production companies')\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id kind]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ct.id)\n" + - " │ ├─ right-key: (mc.company_type_id)\n" + - " │ └─ HashJoin\n" + - " │ ├─ (mc.company_id = cn.id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + - " │ │ └─ TableAlias(cn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name country_code]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (cn.id)\n" + - " │ ├─ right-key: (mc.company_id)\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (ml.movie_id = mk.movie_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id link_type_id]\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mi.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'English'))\n" + - " │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info\n" + - " │ │ │ └─ columns: [movie_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ mc.note IS NULL\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ IndexedTableAccess(movie_companies)\n" + - " │ │ ├─ index: [movie_companies.movie_id]\n" + - " │ │ ├─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ └─ keys: mi.movie_id\n" + - " │ └─ TableAlias(cc)\n" + - " │ └─ IndexedTableAccess(complete_cast)\n" + - " │ ├─ index: [complete_cast.movie_id]\n" + - " │ ├─ columns: [movie_id subject_id status_id]\n" + - " │ └─ keys: mc.movie_id\n" + - " └─ HashLookup\n" + - " ├─ left-key: (ml.movie_id, mk.movie_id, mc.movie_id, mi.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 1950) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year >= 1950) AND (t.production_year <= 2010))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mk.movie_id)) AND (ml.movie_id = mc.movie_id)) AND (ml.movie_id = mi.movie_id)) AND (ml.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mk.keyword_id = k.id) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = mi.movie_id)) AND (mk.movie_id = cc.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'English'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.company_type_id = ct.id) AND (mc.company_id = cn.id)) AND (mc.movie_id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note IS NULL\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'sequel')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ct.kind = 'production companies')\n" + + " │ └─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT((cn.country_code = '[pl]'))) AND (cn.name LIKE '%Film%' OR cn.name LIKE '%Warner%'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((cct2.kind >= 'complete') AND (cct2.kind <= 'completeÿ'))\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -20798,207 +19827,225 @@ WHERE cct1.kind = 'crew' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->complete_euro_dark_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:23!null), MIN(mi_idx.info:32!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(cn.name:26!null), MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ mi.movie_id:13!null\n" + - " │ │ │ │ │ └─ mi_idx.movie_id:30!null\n" + + " │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ ├─ kt.id:16!null\n" + + " │ │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:9!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:18!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:30!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:4!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:30!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:26!null\n" + - " │ │ └─ mi_idx.movie_id:30!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:30!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:26!null\n" + - " │ │ │ │ └─ mi.movie_id:13!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:26!null\n" + - " │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:26!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:13!null\n" + - " │ │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mi.movie_id:13!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct2.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ complete+verified (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ crew (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ │ │ └─ tableId: 2\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:16!null\n" + - " │ │ │ │ └─ mi.info_type_id:14!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ countries (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:25!null\n" + - " │ │ │ └─ mc.company_type_id:20!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:22!null\n" + - " │ │ │ │ └─ mc.company_id:19!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ │ │ └─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:28!null\n" + - " │ │ └─ mk.keyword_id:27!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " │ └─ cc.movie_id:32\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ it2.id:33!null\n" + - " │ └─ mi_idx.info_type_id:31!null\n" + - " ├─ Filter\n" + - " │ ├─ LessThan\n" + - " │ │ ├─ mi_idx.info:2!null\n" + - " │ │ └─ 8.5 (longtext)\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ it2.info:1!null\n" + - " │ └─ rating (longtext)\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " ├─ columns: [id info]\n" + - " ├─ colSet: (20,21)\n" + - " └─ tableId: 7\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mc.movie_id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:18!null\n" + + " │ └─ mk.keyword_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mc.movie_id:12!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:20!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.5 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ └─ mc.movie_id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:22!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:12!null\n" + + " │ │ │ └─ cc.movie_id:32\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ct.id:24!null\n" + + " │ │ └─ mc.company_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:25!null\n" + + " │ └─ mc.company_id:13!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(200%)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ countries (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (18,19)\n" + + " │ └─ tableId: 6\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:28!null\n" + + " │ └─ cc.status_id:34!null\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ complete+verified (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:30!null\n" + + " │ └─ cc.subject_id:33!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ crew (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as complete_euro_dark_movie]\n" + @@ -21006,109 +20053,103 @@ WHERE cct1.kind = 'crew' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (NOT((cct2.kind = 'complete+verified')))\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'crew')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'countries')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (mi_idx.info < '8.5')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'rating')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (ct.id = mc.company_type_id)) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cn.country_code = '[us]')))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cct2.kind = 'complete+verified')))\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'crew')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as complete_euro_dark_movie]\n" + @@ -21116,109 +20157,103 @@ WHERE cct1.kind = 'crew' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (NOT((cct2.kind = 'complete+verified')))\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'crew')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'countries')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (mi_idx.info < '8.5')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'rating')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (ct.id = mc.company_type_id)) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cn.country_code = '[us]')))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cct2.kind = 'complete+verified')))\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'crew')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -21287,207 +20322,225 @@ WHERE cct1.kind = 'crew' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->complete_euro_dark_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:23!null), MIN(mi_idx.info:32!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(cn.name:26!null), MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ mi.movie_id:13!null\n" + - " │ │ │ │ │ └─ mi_idx.movie_id:30!null\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:18!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:30!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:30!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:26!null\n" + - " │ │ └─ mi_idx.movie_id:30!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:30!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:26!null\n" + - " │ │ │ │ └─ mi.movie_id:13!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:26!null\n" + - " │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:26!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:13!null\n" + - " │ │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mi.movie_id:13!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ │ └─ 2005 (int)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct2.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ complete+verified (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ crew (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ │ │ └─ tableId: 2\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:16!null\n" + - " │ │ │ │ └─ mi.info_type_id:14!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ │ └─ TUPLE(Sweden (longtext), Germany (longtext), Swedish (longtext), German (longtext))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ countries (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:25!null\n" + - " │ │ │ └─ mc.company_type_id:20!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:22!null\n" + - " │ │ │ │ └─ mc.company_id:19!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ │ │ └─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:28!null\n" + - " │ │ └─ mk.keyword_id:27!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ ├─ kt.id:16!null\n" + + " │ │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:4!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ cc.movie_id:32\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ it2.id:33!null\n" + - " │ └─ mi_idx.info_type_id:31!null\n" + - " ├─ Filter\n" + - " │ ├─ GreaterThan\n" + - " │ │ ├─ mi_idx.info:2!null\n" + - " │ │ └─ 6.5 (longtext)\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ it2.info:1!null\n" + - " │ └─ rating (longtext)\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " ├─ columns: [id info]\n" + - " ├─ colSet: (20,21)\n" + - " └─ tableId: 7\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mc.movie_id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:18!null\n" + + " │ └─ mk.keyword_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mc.movie_id:12!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:20!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 6.5 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ └─ mc.movie_id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:22!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Germany (longtext), Swedish (longtext), German (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:12!null\n" + + " │ │ │ └─ cc.movie_id:32\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ct.id:24!null\n" + + " │ │ └─ mc.company_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:25!null\n" + + " │ └─ mc.company_id:13!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(200%)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ countries (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (18,19)\n" + + " │ └─ tableId: 6\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:28!null\n" + + " │ └─ cc.status_id:34!null\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ complete+verified (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:30!null\n" + + " │ └─ cc.subject_id:33!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ crew (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as complete_euro_dark_movie]\n" + @@ -21495,109 +20548,103 @@ WHERE cct1.kind = 'crew' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (NOT((cct2.kind = 'complete+verified')))\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'crew')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'countries')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (mi_idx.info > '6.5')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'rating')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '6.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (ct.id = mc.company_type_id)) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cn.country_code = '[us]')))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cct2.kind = 'complete+verified')))\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'crew')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as complete_euro_dark_movie]\n" + @@ -21605,109 +20652,103 @@ WHERE cct1.kind = 'crew' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (NOT((cct2.kind = 'complete+verified')))\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'crew')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'countries')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (mi_idx.info > '6.5')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'rating')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '6.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Germany', 'Swedish', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (ct.id = mc.company_type_id)) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cn.country_code = '[us]')))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cct2.kind = 'complete+verified')))\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'crew')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -21782,206 +20823,224 @@ WHERE cct1.kind = 'cast' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn.name):0!null->movie_company:0, min(mi_idx.info):1!null->rating:0, min(t.title):2!null->complete_euro_dark_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn.name:23!null), MIN(mi_idx.info:32!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(cn.name:26!null), MIN(mi_idx.info:8!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ mi.movie_id:13!null\n" + - " │ │ │ │ │ └─ mi_idx.movie_id:30!null\n" + + " │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ ├─ kt.id:16!null\n" + + " │ │ │ │ │ │ └─ t.kind_id:2!null\n" + + " │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:9!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ mc.movie_id:18!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:30!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mk.movie_id:4!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:30!null\n" + - " │ │ │ └─ cc.movie_id:8\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:26!null\n" + - " │ │ └─ mi_idx.movie_id:30!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mi_idx.movie_id:30!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:26!null\n" + - " │ │ │ │ └─ mi.movie_id:13!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mk.movie_id:26!null\n" + - " │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:26!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:13!null\n" + - " │ │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:0!null\n" + - " │ │ │ └─ mc.movie_id:18!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ └─ mi.movie_id:13!null\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ kt.id:11!null\n" + - " │ │ │ │ │ └─ t.kind_id:2!null\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ t.id:0!null\n" + - " │ │ │ │ │ │ └─ cc.movie_id:8\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ │ │ ├─ t.production_year:3\n" + - " │ │ │ │ │ │ │ └─ 2005 (int)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct2.id:4!null\n" + - " │ │ │ │ │ │ └─ cc.status_id:10!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct2.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ complete (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ cct1.id:6!null\n" + - " │ │ │ │ │ │ └─ cc.subject_id:9!null\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ ├─ cct1.kind:1!null\n" + - " │ │ │ │ │ │ │ └─ cast (longtext)\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ ├─ columns: [id kind]\n" + - " │ │ │ │ │ │ ├─ colSet: (5,6)\n" + - " │ │ │ │ │ │ └─ tableId: 2\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ kt.kind:1!null\n" + - " │ │ │ │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:16!null\n" + - " │ │ │ │ └─ mi.info_type_id:14!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ countries (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:25!null\n" + - " │ │ │ └─ mc.company_type_id:20!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ cn.id:22!null\n" + - " │ │ │ │ └─ mc.company_id:19!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ NOT\n" + - " │ │ │ │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ │ │ └─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ cn.country_code:2\n" + - " │ │ │ │ └─ [us] (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:28!null\n" + - " │ │ └─ mk.keyword_id:27!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " │ └─ cc.movie_id:32\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:3\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ it2.id:33!null\n" + - " │ └─ mi_idx.info_type_id:31!null\n" + - " ├─ Filter\n" + - " │ ├─ LessThan\n" + - " │ │ ├─ mi_idx.info:2!null\n" + - " │ │ └─ 8.5 (longtext)\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ it2.info:1!null\n" + - " │ └─ rating (longtext)\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " ├─ columns: [id info]\n" + - " ├─ colSet: (20,21)\n" + - " └─ tableId: 7\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mk.movie_id:4!null\n" + + " │ │ │ └─ mc.movie_id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:18!null\n" + + " │ └─ mk.keyword_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mc.movie_id:12!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:20!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 8.5 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ └─ mc.movie_id:12!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ cc.movie_id:32\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:22!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Danish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ mc.movie_id:12!null\n" + + " │ │ │ └─ cc.movie_id:32\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ct.id:24!null\n" + + " │ │ └─ mc.company_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:25!null\n" + + " │ └─ mc.company_id:13!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(200%)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt.kind:1!null\n" + + " │ │ └─ TUPLE(movie (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), murder-in-title (longtext), blood (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ countries (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (18,19)\n" + + " │ └─ tableId: 6\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ cn.country_code:2\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:28!null\n" + + " │ └─ cc.status_id:34!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ complete (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct1.id:30!null\n" + + " │ └─ cc.subject_id:33!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as complete_euro_dark_movie]\n" + @@ -21989,109 +21048,103 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct2.kind = 'complete')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'countries')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (mi_idx.info < '8.5')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'rating')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ ((((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (ct.id = mc.company_type_id)) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cn.country_code = '[us]')))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn.name) as movie_company, min(mi_idx.info) as rating, min(t.title) as complete_euro_dark_movie]\n" + @@ -22099,109 +21152,103 @@ WHERE cct1.kind = 'cast' " ├─ SelectedExprs(MIN(cn.name), MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mi_idx.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (((mk.movie_id = mi.movie_id) AND (mk.movie_id = mc.movie_id)) AND (t.id = mk.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (t.id = mc.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (t.id = mi.movie_id)\n" + - " │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ ├─ (kt.id = t.kind_id)\n" + - " │ │ │ │ ├─ InnerJoin\n" + - " │ │ │ │ │ ├─ (t.id = cc.movie_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (t.production_year > 2005)\n" + - " │ │ │ │ │ │ └─ TableAlias(t)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: title\n" + - " │ │ │ │ │ │ └─ columns: [id title kind_id production_year]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct2.kind = 'complete')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct2)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ InnerJoin\n" + - " │ │ │ │ │ ├─ (cct1.id = cc.subject_id)\n" + - " │ │ │ │ │ ├─ Filter\n" + - " │ │ │ │ │ │ ├─ (cct1.kind = 'cast')\n" + - " │ │ │ │ │ │ └─ TableAlias(cct1)\n" + - " │ │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ │ ├─ name: comp_cast_type\n" + - " │ │ │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ │ │ └─ TableAlias(cc)\n" + - " │ │ │ │ │ └─ Table\n" + - " │ │ │ │ │ ├─ name: complete_cast\n" + - " │ │ │ │ │ └─ columns: [movie_id subject_id status_id]\n" + - " │ │ │ │ └─ Filter\n" + - " │ │ │ │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + - " │ │ │ │ └─ TableAlias(kt)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: kind_type\n" + - " │ │ │ │ └─ columns: [id kind]\n" + - " │ │ │ └─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'countries')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (ct.id = mc.company_type_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + - " │ │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_companies\n" + - " │ │ │ │ └─ columns: [movie_id company_id company_type_id note]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (NOT((cn.country_code = '[us]')))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name country_code]\n" + - " │ │ └─ TableAlias(ct)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_type\n" + - " │ │ └─ columns: [id]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((((((kt.id = t.kind_id) AND (t.id = mi.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mi_idx.movie_id)) AND (t.id = mc.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ Filter\n" + - " │ ├─ (mi_idx.info < '8.5')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'rating')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (((((mk.movie_id = mi.movie_id) AND (mk.movie_id = mi_idx.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((mi.movie_id = mi_idx.movie_id) AND (mc.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info < '8.5')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mi.movie_id = mc.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Danish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((mc.movie_id = cc.movie_id) AND (ct.id = mc.company_type_id)) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(USA)%')) AND mc.note LIKE '%(200%)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt.kind HASH IN ('movie', 'episode'))\n" + + " │ └─ TableAlias(kt)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'murder-in-title', 'blood', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'countries')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(ct)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_type\n" + + " │ └─ columns: [id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (NOT((cn.country_code = '[us]')))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name country_code]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ InnerJoin\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -22279,7 +21326,7 @@ WHERE cct1.kind ='cast' " └─ GroupBy\n" + " ├─ select: MIN(chn.name:9!null), MIN(n.name:31!null), MIN(t.title:38!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + @@ -22299,15 +21346,19 @@ WHERE cct1.kind ='cast' " │ └─ Eq\n" + " │ ├─ t.id:37!null\n" + " │ └─ cc.movie_id:1\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.id:35!null\n" + " │ │ └─ ci.role_id:14!null\n" + - " │ ├─ LookupJoin\n" + + " │ ├─ InnerJoin\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ci.person_id:10!null\n" + - " │ │ │ │ └─ pi.person_id:33!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ n.id:30!null\n" + + " │ │ │ │ │ └─ pi.person_id:33!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ci.person_id:10!null\n" + + " │ │ │ │ └─ pi.person_id:33!null\n" + " │ │ │ └─ Eq\n" + " │ │ │ ├─ it3.id:19!null\n" + " │ │ │ └─ pi.info_type_id:34!null\n" + @@ -22339,12 +21390,16 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Eq\n" + " │ │ │ │ │ ├─ k.id:21!null\n" + " │ │ │ │ │ └─ mk.keyword_id:29!null\n" + - " │ │ │ │ ├─ LookupJoin\n" + + " │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ ├─ AND\n" + " │ │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + - " │ │ │ │ │ │ │ │ └─ ci.movie_id:11!null\n" + + " │ │ │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ │ │ │ ├─ mc.movie_id:23!null\n" + + " │ │ │ │ │ │ │ │ │ └─ mi.movie_id:25!null\n" + + " │ │ │ │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + + " │ │ │ │ │ │ │ │ └─ ci.movie_id:11!null\n" + " │ │ │ │ │ │ │ └─ Eq\n" + " │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + " │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + @@ -22367,14 +21422,18 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.movie_id:11!null\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.person_id:10!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ an.person_id:0!null\n" + " │ │ │ │ │ │ │ │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.person_id:10!null\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ └─ an.person_id:0!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ chn.id:8!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ └─ ci.person_role_id:12\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + @@ -22428,11 +21487,7 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.note:3\n" + " │ │ │ │ │ │ │ │ │ │ │ │ └─ TUPLE((voice) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ keys: [chn.id:8!null]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ colSet: (24-30)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ tableId: 6\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ ProcessTable\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + @@ -22486,11 +21541,7 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ ├─ mi.info LIKE 'Japan:%200%'\n" + " │ │ │ │ │ │ └─ mi.info LIKE 'USA:%200%'\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ keys: [mc.movie_id:23!null]\n" + - " │ │ │ │ │ ├─ colSet: (50-54)\n" + - " │ │ │ │ │ ├─ tableId: 12\n" + + " │ │ │ │ │ └─ ProcessTable\n" + " │ │ │ │ │ └─ Table\n" + " │ │ │ │ │ ├─ name: movie_info\n" + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + @@ -22511,72 +21562,62 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ keys: [n.id:30!null]\n" + - " │ │ ├─ colSet: (67-71)\n" + - " │ │ ├─ tableId: 15\n" + + " │ │ └─ ProcessTable\n" + " │ │ └─ Table\n" + " │ │ ├─ name: person_info\n" + " │ │ └─ columns: [person_id info_type_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.role_id:14!null)\n" + - " │ ├─ right-key: TUPLE(rt.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ rt.role:1!null\n" + - " │ │ └─ actress (longtext)\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:25!null, mc.movie_id:23!null, ci.movie_id:11!null, mk.movie_id:28!null, cc.movie_id:1)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.title:1!null\n" + - " │ │ │ └─ Shrek 2 (longtext)\n" + - " │ │ └─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2000 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2010 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ └─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ rt.role:1!null\n" + + " │ │ └─ actress (longtext)\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ Shrek 2 (longtext)\n" + + " │ │ └─ GreaterThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (smallint)\n" + + " │ └─ LessThanOrEqual\n" + + " │ ├─ t.production_year:2\n" + + " │ └─ 2010 (smallint)\n" + + " └─ TableAlias(t)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char, min(n.name) as voicing_actress, min(t.title) as voiced_animation]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(chn.name), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mc.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ (rt.id = ci.role_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ ((ci.person_id = pi.person_id) AND (it3.id = pi.info_type_id))\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (((n.id = pi.person_id) AND (ci.person_id = pi.person_id)) AND (it3.id = pi.info_type_id))\n" + " │ │ ├─ InnerJoin\n" + " │ │ │ ├─ ((n.id = ci.person_id) AND (n.id = an.person_id))\n" + " │ │ │ ├─ InnerJoin\n" + " │ │ │ │ ├─ (((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + - " │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ ├─ (((mi.movie_id = ci.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + + " │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ ├─ ((((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + " │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ ├─ (((mc.movie_id = ci.movie_id) AND (mc.movie_id = cc.movie_id)) AND (cn.id = mc.company_id))\n" + " │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ ((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id))\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ (((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id)) AND (chn.id = ci.person_role_id))\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + @@ -22612,10 +21653,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice) (uncredited)', '(voice: English version)'))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ keys: chn.id\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + " │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ ├─ (cn.country_code = '[us]')\n" + " │ │ │ │ │ │ │ │ │ │ └─ TableAlias(cn)\n" + @@ -22647,10 +21687,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ │ │ └─ keys: mc.movie_id\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: movie_info\n" + + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + " │ │ │ │ └─ TableAlias(mk)\n" + " │ │ │ │ └─ Table\n" + " │ │ │ │ ├─ name: movie_keyword\n" + @@ -22662,54 +21701,47 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ columns: [person_id info_type_id]\n" + - " │ │ └─ keys: n.id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.role_id)\n" + - " │ ├─ right-key: (rt.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (rt.role = 'actress')\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mc.movie_id, ci.movie_id, mk.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (((t.title = 'Shrek 2') AND (t.production_year >= 2000)) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id]\n" + + " │ └─ Filter\n" + + " │ ├─ (rt.role = 'actress')\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ (((t.title = 'Shrek 2') AND (t.production_year >= 2000)) AND (t.production_year <= 2010))\n" + + " └─ TableAlias(t)\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char, min(n.name) as voicing_actress, min(t.title) as voiced_animation]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(chn.name), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mc.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ (rt.id = ci.role_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ ((ci.person_id = pi.person_id) AND (it3.id = pi.info_type_id))\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (((n.id = pi.person_id) AND (ci.person_id = pi.person_id)) AND (it3.id = pi.info_type_id))\n" + " │ │ ├─ InnerJoin\n" + " │ │ │ ├─ ((n.id = ci.person_id) AND (n.id = an.person_id))\n" + " │ │ │ ├─ InnerJoin\n" + " │ │ │ │ ├─ (((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + - " │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ ├─ (((mi.movie_id = ci.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + + " │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ ├─ ((((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + " │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ ├─ (((mc.movie_id = ci.movie_id) AND (mc.movie_id = cc.movie_id)) AND (cn.id = mc.company_id))\n" + " │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ ((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id))\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ (((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id)) AND (chn.id = ci.person_role_id))\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + @@ -22745,10 +21777,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice) (uncredited)', '(voice: English version)'))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ keys: chn.id\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + " │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ ├─ (cn.country_code = '[us]')\n" + " │ │ │ │ │ │ │ │ │ │ └─ TableAlias(cn)\n" + @@ -22780,10 +21811,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ │ │ └─ keys: mc.movie_id\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: movie_info\n" + + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + " │ │ │ │ └─ TableAlias(mk)\n" + " │ │ │ │ └─ Table\n" + " │ │ │ │ ├─ name: movie_keyword\n" + @@ -22795,28 +21825,21 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ columns: [person_id info_type_id]\n" + - " │ │ └─ keys: n.id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.role_id)\n" + - " │ ├─ right-key: (rt.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (rt.role = 'actress')\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mc.movie_id, ci.movie_id, mk.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (((t.title = 'Shrek 2') AND (t.production_year >= 2000)) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id]\n" + + " │ └─ Filter\n" + + " │ ├─ (rt.role = 'actress')\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ (((t.title = 'Shrek 2') AND (t.production_year >= 2000)) AND (t.production_year <= 2010))\n" + + " └─ TableAlias(t)\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", }, { @@ -22892,7 +21915,7 @@ WHERE cct1.kind ='cast' " └─ GroupBy\n" + " ├─ select: MIN(chn.name:9!null), MIN(n.name:31!null), MIN(t.title:38!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + @@ -22912,15 +21935,19 @@ WHERE cct1.kind ='cast' " │ └─ Eq\n" + " │ ├─ t.id:37!null\n" + " │ └─ cc.movie_id:1\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.id:35!null\n" + " │ │ └─ ci.role_id:14!null\n" + - " │ ├─ LookupJoin\n" + + " │ ├─ InnerJoin\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ci.person_id:10!null\n" + - " │ │ │ │ └─ pi.person_id:33!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ n.id:30!null\n" + + " │ │ │ │ │ └─ pi.person_id:33!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ci.person_id:10!null\n" + + " │ │ │ │ └─ pi.person_id:33!null\n" + " │ │ │ └─ Eq\n" + " │ │ │ ├─ it3.id:19!null\n" + " │ │ │ └─ pi.info_type_id:34!null\n" + @@ -22952,12 +21979,16 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Eq\n" + " │ │ │ │ │ ├─ k.id:21!null\n" + " │ │ │ │ │ └─ mk.keyword_id:29!null\n" + - " │ │ │ │ ├─ LookupJoin\n" + + " │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ ├─ AND\n" + " │ │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + - " │ │ │ │ │ │ │ │ └─ ci.movie_id:11!null\n" + + " │ │ │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ │ │ │ ├─ mc.movie_id:23!null\n" + + " │ │ │ │ │ │ │ │ │ └─ mi.movie_id:25!null\n" + + " │ │ │ │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + + " │ │ │ │ │ │ │ │ └─ ci.movie_id:11!null\n" + " │ │ │ │ │ │ │ └─ Eq\n" + " │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + " │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + @@ -22980,14 +22011,18 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.movie_id:11!null\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.person_id:10!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ an.person_id:0!null\n" + " │ │ │ │ │ │ │ │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.person_id:10!null\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ └─ an.person_id:0!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ chn.id:8!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ └─ ci.person_role_id:12\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + @@ -23041,11 +22076,7 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.note:3\n" + " │ │ │ │ │ │ │ │ │ │ │ │ └─ TUPLE((voice) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ keys: [chn.id:8!null]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ colSet: (24-30)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ tableId: 6\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ ProcessTable\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + @@ -23094,11 +22125,7 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ ├─ mi.info LIKE 'USA:%200%'\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ keys: [mc.movie_id:23!null]\n" + - " │ │ │ │ │ ├─ colSet: (50-54)\n" + - " │ │ │ │ │ ├─ tableId: 12\n" + + " │ │ │ │ │ └─ ProcessTable\n" + " │ │ │ │ │ └─ Table\n" + " │ │ │ │ │ ├─ name: movie_info\n" + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + @@ -23119,72 +22146,62 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ keys: [n.id:30!null]\n" + - " │ │ ├─ colSet: (67-71)\n" + - " │ │ ├─ tableId: 15\n" + + " │ │ └─ ProcessTable\n" + " │ │ └─ Table\n" + " │ │ ├─ name: person_info\n" + " │ │ └─ columns: [person_id info_type_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.role_id:14!null)\n" + - " │ ├─ right-key: TUPLE(rt.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ rt.role:1!null\n" + - " │ │ └─ actress (longtext)\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:25!null, mc.movie_id:23!null, ci.movie_id:11!null, mk.movie_id:28!null, cc.movie_id:1)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.title:1!null\n" + - " │ │ │ └─ Shrek 2 (longtext)\n" + - " │ │ └─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2000 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2005 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ └─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ rt.role:1!null\n" + + " │ │ └─ actress (longtext)\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ Shrek 2 (longtext)\n" + + " │ │ └─ GreaterThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (smallint)\n" + + " │ └─ LessThanOrEqual\n" + + " │ ├─ t.production_year:2\n" + + " │ └─ 2005 (smallint)\n" + + " └─ TableAlias(t)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char, min(n.name) as voicing_actress, min(t.title) as voiced_animation]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(chn.name), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mc.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ (rt.id = ci.role_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ ((ci.person_id = pi.person_id) AND (it3.id = pi.info_type_id))\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (((n.id = pi.person_id) AND (ci.person_id = pi.person_id)) AND (it3.id = pi.info_type_id))\n" + " │ │ ├─ InnerJoin\n" + " │ │ │ ├─ ((n.id = ci.person_id) AND (n.id = an.person_id))\n" + " │ │ │ ├─ InnerJoin\n" + " │ │ │ │ ├─ (((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + - " │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ ├─ (((mi.movie_id = ci.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + + " │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ ├─ ((((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + " │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ ├─ (((mc.movie_id = ci.movie_id) AND (mc.movie_id = cc.movie_id)) AND (cn.id = mc.company_id))\n" + " │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ ((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id))\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ (((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id)) AND (chn.id = ci.person_role_id))\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + @@ -23220,10 +22237,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice) (uncredited)', '(voice: English version)'))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ keys: chn.id\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + " │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ ├─ (cn.country_code = '[us]')\n" + " │ │ │ │ │ │ │ │ │ │ └─ TableAlias(cn)\n" + @@ -23255,10 +22271,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ ├─ mi.info LIKE 'USA:%200%'\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ │ │ └─ keys: mc.movie_id\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: movie_info\n" + + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + " │ │ │ │ └─ TableAlias(mk)\n" + " │ │ │ │ └─ Table\n" + " │ │ │ │ ├─ name: movie_keyword\n" + @@ -23270,54 +22285,47 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ columns: [person_id info_type_id]\n" + - " │ │ └─ keys: n.id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.role_id)\n" + - " │ ├─ right-key: (rt.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (rt.role = 'actress')\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mc.movie_id, ci.movie_id, mk.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (((t.title = 'Shrek 2') AND (t.production_year >= 2000)) AND (t.production_year <= 2005))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id]\n" + + " │ └─ Filter\n" + + " │ ├─ (rt.role = 'actress')\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ (((t.title = 'Shrek 2') AND (t.production_year >= 2000)) AND (t.production_year <= 2005))\n" + + " └─ TableAlias(t)\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char, min(n.name) as voicing_actress, min(t.title) as voiced_animation]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(chn.name), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mc.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ (rt.id = ci.role_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ ((ci.person_id = pi.person_id) AND (it3.id = pi.info_type_id))\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (((n.id = pi.person_id) AND (ci.person_id = pi.person_id)) AND (it3.id = pi.info_type_id))\n" + " │ │ ├─ InnerJoin\n" + " │ │ │ ├─ ((n.id = ci.person_id) AND (n.id = an.person_id))\n" + " │ │ │ ├─ InnerJoin\n" + " │ │ │ │ ├─ (((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + - " │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ ├─ (((mi.movie_id = ci.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + + " │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ ├─ ((((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + " │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ ├─ (((mc.movie_id = ci.movie_id) AND (mc.movie_id = cc.movie_id)) AND (cn.id = mc.company_id))\n" + " │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ ((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id))\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ (((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id)) AND (chn.id = ci.person_role_id))\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + @@ -23353,10 +22361,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice) (uncredited)', '(voice: English version)'))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ keys: chn.id\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + " │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ ├─ (cn.country_code = '[us]')\n" + " │ │ │ │ │ │ │ │ │ │ └─ TableAlias(cn)\n" + @@ -23388,10 +22395,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ ├─ mi.info LIKE 'USA:%200%'\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ │ │ └─ keys: mc.movie_id\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: movie_info\n" + + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + " │ │ │ │ └─ TableAlias(mk)\n" + " │ │ │ │ └─ Table\n" + " │ │ │ │ ├─ name: movie_keyword\n" + @@ -23403,28 +22409,21 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ columns: [person_id info_type_id]\n" + - " │ │ └─ keys: n.id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.role_id)\n" + - " │ ├─ right-key: (rt.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (rt.role = 'actress')\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mc.movie_id, ci.movie_id, mk.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ (((t.title = 'Shrek 2') AND (t.production_year >= 2000)) AND (t.production_year <= 2005))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id]\n" + + " │ └─ Filter\n" + + " │ ├─ (rt.role = 'actress')\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ (((t.title = 'Shrek 2') AND (t.production_year >= 2000)) AND (t.production_year <= 2005))\n" + + " └─ TableAlias(t)\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", }, { @@ -23501,7 +22500,7 @@ WHERE cct1.kind ='cast' " └─ GroupBy\n" + " ├─ select: MIN(chn.name:9!null), MIN(n.name:31!null), MIN(t.title:38!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + @@ -23521,15 +22520,19 @@ WHERE cct1.kind ='cast' " │ └─ Eq\n" + " │ ├─ t.id:37!null\n" + " │ └─ cc.movie_id:1\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ rt.id:35!null\n" + " │ │ └─ ci.role_id:14!null\n" + - " │ ├─ LookupJoin\n" + + " │ ├─ InnerJoin\n" + " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ci.person_id:10!null\n" + - " │ │ │ │ └─ pi.person_id:33!null\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ n.id:30!null\n" + + " │ │ │ │ │ └─ pi.person_id:33!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ci.person_id:10!null\n" + + " │ │ │ │ └─ pi.person_id:33!null\n" + " │ │ │ └─ Eq\n" + " │ │ │ ├─ it3.id:19!null\n" + " │ │ │ └─ pi.info_type_id:34!null\n" + @@ -23561,12 +22564,16 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Eq\n" + " │ │ │ │ │ ├─ k.id:21!null\n" + " │ │ │ │ │ └─ mk.keyword_id:29!null\n" + - " │ │ │ │ ├─ LookupJoin\n" + + " │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ ├─ AND\n" + " │ │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + - " │ │ │ │ │ │ │ │ └─ ci.movie_id:11!null\n" + + " │ │ │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ │ │ │ ├─ mc.movie_id:23!null\n" + + " │ │ │ │ │ │ │ │ │ └─ mi.movie_id:25!null\n" + + " │ │ │ │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + + " │ │ │ │ │ │ │ │ └─ ci.movie_id:11!null\n" + " │ │ │ │ │ │ │ └─ Eq\n" + " │ │ │ │ │ │ │ ├─ mi.movie_id:25!null\n" + " │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + @@ -23589,14 +22596,18 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.movie_id:11!null\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.movie_id:11!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ │ └─ cc.movie_id:1\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.person_id:10!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ │ └─ an.person_id:0!null\n" + " │ │ │ │ │ │ │ │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.person_id:10!null\n" + - " │ │ │ │ │ │ │ │ │ │ │ │ └─ an.person_id:0!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ chn.id:8!null\n" + + " │ │ │ │ │ │ │ │ │ │ │ │ └─ ci.person_role_id:12\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ Eq\n" + @@ -23646,11 +22657,7 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ │ ├─ ci.note:3\n" + " │ │ │ │ │ │ │ │ │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ keys: [chn.id:8!null]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ colSet: (24-30)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ tableId: 6\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ ProcessTable\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + @@ -23704,11 +22711,7 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ ├─ mi.info LIKE 'Japan:%200%'\n" + " │ │ │ │ │ │ └─ mi.info LIKE 'USA:%200%'\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ keys: [mc.movie_id:23!null]\n" + - " │ │ │ │ │ ├─ colSet: (50-54)\n" + - " │ │ │ │ │ ├─ tableId: 12\n" + + " │ │ │ │ │ └─ ProcessTable\n" + " │ │ │ │ │ └─ Table\n" + " │ │ │ │ │ ├─ name: movie_info\n" + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + @@ -23729,68 +22732,58 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ keys: [n.id:30!null]\n" + - " │ │ ├─ colSet: (67-71)\n" + - " │ │ ├─ tableId: 15\n" + + " │ │ └─ ProcessTable\n" + " │ │ └─ Table\n" + " │ │ ├─ name: person_info\n" + " │ │ └─ columns: [person_id info_type_id]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.role_id:14!null)\n" + - " │ ├─ right-key: TUPLE(rt.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ rt.role:1!null\n" + - " │ │ └─ actress (longtext)\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:25!null, mc.movie_id:23!null, ci.movie_id:11!null, mk.movie_id:28!null, cc.movie_id:1)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + - " ├─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2000 (smallint)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.production_year:2\n" + - " │ └─ 2010 (smallint)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ └─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ rt.role:1!null\n" + + " │ │ └─ actress (longtext)\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ GreaterThanOrEqual\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (smallint)\n" + + " │ └─ LessThanOrEqual\n" + + " │ ├─ t.production_year:2\n" + + " │ └─ 2010 (smallint)\n" + + " └─ TableAlias(t)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char, min(n.name) as voicing_actress, min(t.title) as voiced_animation]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(chn.name), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mc.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ (rt.id = ci.role_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ ((ci.person_id = pi.person_id) AND (it3.id = pi.info_type_id))\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (((n.id = pi.person_id) AND (ci.person_id = pi.person_id)) AND (it3.id = pi.info_type_id))\n" + " │ │ ├─ InnerJoin\n" + " │ │ │ ├─ ((n.id = ci.person_id) AND (n.id = an.person_id))\n" + " │ │ │ ├─ InnerJoin\n" + " │ │ │ │ ├─ (((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + - " │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ ├─ (((mi.movie_id = ci.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + + " │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ ├─ ((((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + " │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ ├─ (((mc.movie_id = ci.movie_id) AND (mc.movie_id = cc.movie_id)) AND (cn.id = mc.company_id))\n" + " │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ ((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id))\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ (((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id)) AND (chn.id = ci.person_role_id))\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + @@ -23824,10 +22817,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ keys: chn.id\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + " │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ ├─ (cn.country_code = '[us]')\n" + " │ │ │ │ │ │ │ │ │ │ └─ TableAlias(cn)\n" + @@ -23859,10 +22851,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ │ │ └─ keys: mc.movie_id\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: movie_info\n" + + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + " │ │ │ │ └─ TableAlias(mk)\n" + " │ │ │ │ └─ Table\n" + " │ │ │ │ ├─ name: movie_keyword\n" + @@ -23874,54 +22865,47 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ columns: [person_id info_type_id]\n" + - " │ │ └─ keys: n.id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.role_id)\n" + - " │ ├─ right-key: (rt.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (rt.role = 'actress')\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mc.movie_id, ci.movie_id, mk.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id]\n" + + " │ └─ Filter\n" + + " │ ├─ (rt.role = 'actress')\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + + " └─ TableAlias(t)\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(chn.name) as voiced_char, min(n.name) as voicing_actress, min(t.title) as voiced_animation]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(chn.name), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mc.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + - " ├─ HashJoin\n" + + " ├─ InnerJoin\n" + " │ ├─ (rt.id = ci.role_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ ((ci.person_id = pi.person_id) AND (it3.id = pi.info_type_id))\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (((n.id = pi.person_id) AND (ci.person_id = pi.person_id)) AND (it3.id = pi.info_type_id))\n" + " │ │ ├─ InnerJoin\n" + " │ │ │ ├─ ((n.id = ci.person_id) AND (n.id = an.person_id))\n" + " │ │ │ ├─ InnerJoin\n" + " │ │ │ │ ├─ (((((mc.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (ci.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + - " │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ ├─ (((mi.movie_id = ci.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + + " │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ ├─ ((((mc.movie_id = mi.movie_id) AND (mi.movie_id = ci.movie_id)) AND (mi.movie_id = cc.movie_id)) AND (it.id = mi.info_type_id))\n" + " │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ ├─ (((mc.movie_id = ci.movie_id) AND (mc.movie_id = cc.movie_id)) AND (cn.id = mc.company_id))\n" + " │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + - " │ │ │ │ │ │ │ │ │ │ ├─ LookupJoin\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ ((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id))\n" + + " │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ (((ci.movie_id = cc.movie_id) AND (ci.person_id = an.person_id)) AND (chn.id = ci.person_role_id))\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ CrossJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ ├─ InnerJoin\n" + " │ │ │ │ │ │ │ │ │ │ │ │ │ ├─ (cct2.id = cc.status_id)\n" + @@ -23955,10 +22939,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + " │ │ │ │ │ │ │ │ │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ index: [cast_info.person_role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ ├─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ │ │ │ │ │ │ │ │ │ └─ keys: chn.id\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ │ │ │ │ │ │ ├─ name: cast_info\n" + + " │ │ │ │ │ │ │ │ │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + " │ │ │ │ │ │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ │ │ │ │ │ ├─ (cn.country_code = '[us]')\n" + " │ │ │ │ │ │ │ │ │ │ └─ TableAlias(cn)\n" + @@ -23990,10 +22973,9 @@ WHERE cct1.kind ='cast' " │ │ │ │ │ └─ Filter\n" + " │ │ │ │ │ ├─ ((NOT(mi.info IS NULL)) AND (mi.info LIKE 'Japan:%200%' OR mi.info LIKE 'USA:%200%'))\n" + " │ │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ │ └─ IndexedTableAccess(movie_info)\n" + - " │ │ │ │ │ ├─ index: [movie_info.movie_id]\n" + - " │ │ │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ │ │ └─ keys: mc.movie_id\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: movie_info\n" + + " │ │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + " │ │ │ │ └─ TableAlias(mk)\n" + " │ │ │ │ └─ Table\n" + " │ │ │ │ ├─ name: movie_keyword\n" + @@ -24005,28 +22987,21 @@ WHERE cct1.kind ='cast' " │ │ │ ├─ name: name\n" + " │ │ │ └─ columns: [id name gender]\n" + " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ IndexedTableAccess(person_info)\n" + - " │ │ ├─ index: [person_info.person_id]\n" + - " │ │ ├─ columns: [person_id info_type_id]\n" + - " │ │ └─ keys: n.id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.role_id)\n" + - " │ ├─ right-key: (rt.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (rt.role = 'actress')\n" + - " │ └─ TableAlias(rt)\n" + - " │ └─ Table\n" + - " │ ├─ name: role_type\n" + - " │ └─ columns: [id role]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mc.movie_id, ci.movie_id, mk.movie_id, cc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id]\n" + + " │ └─ Filter\n" + + " │ ├─ (rt.role = 'actress')\n" + + " │ └─ TableAlias(rt)\n" + + " │ └─ Table\n" + + " │ ├─ name: role_type\n" + + " │ └─ columns: [id role]\n" + + " └─ Filter\n" + + " ├─ ((t.production_year >= 2000) AND (t.production_year <= 2010))\n" + + " └─ TableAlias(t)\n" + + " └─ Table\n" + + " ├─ name: title\n" + + " └─ columns: [id title production_year]\n" + "", }, { @@ -24053,58 +23028,58 @@ WHERE cn.country_code ='[de]' " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:8!null\n" + - " │ │ │ └─ mc.company_id:3!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:2!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:4!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:2!null\n" + + " │ │ ├─ mc.movie_id:4!null\n" + " │ │ └─ t.id:0!null\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:2!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:5!null\n" + + " │ │ ├─ mk.keyword_id:3!null\n" + " │ │ └─ k.id:6!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ character-name-in-title (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:4!null\n" + + " │ └─ mk.movie_id:2!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [de] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ ├─ cn.id:8!null\n" + + " │ └─ mc.company_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:1\n" + + " │ └─ [de] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -24112,36 +23087,36 @@ WHERE cn.country_code ='[de]' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((cn.id = mc.company_id) AND (mc.movie_id = mk.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = t.id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[de]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = t.id) AND (t.id = mk.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn.id = mc.company_id)\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[de]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -24149,36 +23124,36 @@ WHERE cn.country_code ='[de]' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((cn.id = mc.company_id) AND (mc.movie_id = mk.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = t.id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[de]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = t.id) AND (t.id = mk.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn.id = mc.company_id)\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[de]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", }, { @@ -24205,58 +23180,58 @@ WHERE cn.country_code ='[nl]' " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:8!null\n" + - " │ │ │ └─ mc.company_id:3!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:2!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:4!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:2!null\n" + + " │ │ ├─ mc.movie_id:4!null\n" + " │ │ └─ t.id:0!null\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:2!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:5!null\n" + + " │ │ ├─ mk.keyword_id:3!null\n" + " │ │ └─ k.id:6!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ character-name-in-title (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:4!null\n" + + " │ └─ mk.movie_id:2!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [nl] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ ├─ cn.id:8!null\n" + + " │ └─ mc.company_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:1\n" + + " │ └─ [nl] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -24264,36 +23239,36 @@ WHERE cn.country_code ='[nl]' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((cn.id = mc.company_id) AND (mc.movie_id = mk.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = t.id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[nl]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = t.id) AND (t.id = mk.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn.id = mc.company_id)\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[nl]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -24301,36 +23276,36 @@ WHERE cn.country_code ='[nl]' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((cn.id = mc.company_id) AND (mc.movie_id = mk.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = t.id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[nl]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = t.id) AND (t.id = mk.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn.id = mc.company_id)\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[nl]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", }, { @@ -24357,58 +23332,58 @@ WHERE cn.country_code ='[sm]' " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:8!null\n" + - " │ │ │ └─ mc.company_id:3!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:2!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:4!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:2!null\n" + + " │ │ ├─ mc.movie_id:4!null\n" + " │ │ └─ t.id:0!null\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:2!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:5!null\n" + + " │ │ ├─ mk.keyword_id:3!null\n" + " │ │ └─ k.id:6!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ character-name-in-title (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:4!null\n" + + " │ └─ mk.movie_id:2!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [sm] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ ├─ cn.id:8!null\n" + + " │ └─ mc.company_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:1\n" + + " │ └─ [sm] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -24416,36 +23391,36 @@ WHERE cn.country_code ='[sm]' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((cn.id = mc.company_id) AND (mc.movie_id = mk.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = t.id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[sm]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = t.id) AND (t.id = mk.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn.id = mc.company_id)\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[sm]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -24453,36 +23428,36 @@ WHERE cn.country_code ='[sm]' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((cn.id = mc.company_id) AND (mc.movie_id = mk.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = t.id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[sm]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = t.id) AND (t.id = mk.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn.id = mc.company_id)\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[sm]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", }, { @@ -24509,58 +23484,58 @@ WHERE cn.country_code ='[us]' " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:8!null\n" + - " │ │ │ └─ mc.company_id:3!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:2!null\n" + - " │ │ └─ mk.movie_id:4!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:4!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + - " │ │ ├─ mc.movie_id:2!null\n" + + " │ │ ├─ mc.movie_id:4!null\n" + " │ │ └─ t.id:0!null\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:2!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mk.keyword_id:5!null\n" + + " │ │ ├─ mk.keyword_id:3!null\n" + " │ │ └─ k.id:6!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ character-name-in-title (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + + " │ └─ Eq\n" + + " │ ├─ mc.movie_id:4!null\n" + + " │ └─ mk.movie_id:2!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ ├─ cn.id:8!null\n" + + " │ └─ mc.company_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ character-name-in-title (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn.country_code:1\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -24568,36 +23543,36 @@ WHERE cn.country_code ='[us]' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((cn.id = mc.company_id) AND (mc.movie_id = mk.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = t.id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = t.id) AND (t.id = mk.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn.id = mc.company_id)\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -24605,36 +23580,36 @@ WHERE cn.country_code ='[us]' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((cn.id = mc.company_id) AND (mc.movie_id = mk.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mc.movie_id = t.id)\n" + - " │ ├─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_id]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (mk.keyword_id = k.id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'character-name-in-title')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.movie_id = t.id) AND (t.id = mk.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.keyword_id = k.id) AND (mc.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn.id = mc.company_id)\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'character-name-in-title')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (cn.country_code = '[us]')\n" + + " └─ TableAlias(cn)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id country_code]\n" + "", }, { @@ -24702,383 +23677,375 @@ WHERE cct1.kind IN ('cast', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->writer:0, min(t.title):3!null->complete_violent_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:9!null), MIN(mi_idx.info:27!null), MIN(n.name:16!null), MIN(t.title:13!null)\n" + + " ├─ select: MIN(mi.info:13!null), MIN(mi_idx.info:10!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ cct1.id:0!null\n" + - " │ └─ cc.subject_id:5!null\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:11!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:21!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ cc.movie_id:27\n" + " ├─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ cct1.kind:1!null\n" + - " │ │ └─ TUPLE(cast (longtext), crew (longtext))\n" + - " │ └─ TableAlias(cct1)\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cct1.id:0!null)\n" + - " ├─ right-key: TUPLE(cc.subject_id:3!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ cct2.id:2!null\n" + - " │ └─ cc.status_id:6!null\n" + - " ├─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct2.kind:1!null\n" + - " │ │ └─ complete+verified (longtext)\n" + - " │ └─ TableAlias(cct2)\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:3!null\n" + + " │ └─ ci.person_id:20!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:2\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ ci.movie_id:21!null\n" + + " │ │ │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:11!null\n" + + " │ │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi_idx.movie_id:8!null\n" + + " │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:27\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:14!null\n" + + " │ └─ mk.keyword_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ ├─ columns: [id kind]\n" + - " │ ├─ colSet: (7,8)\n" + - " │ └─ tableId: 3\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cct2.id:2!null)\n" + - " ├─ right-key: TUPLE(cc.status_id:2!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ ci.movie_id:19!null\n" + - " │ └─ cc.movie_id:4\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cc.movie_id:4)\n" + - " ├─ right-key: TUPLE(ci.movie_id:12!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ mi.movie_id:7!null\n" + - " │ └─ mi_idx.movie_id:25!null\n" + - " ├─ InnerJoin\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:21!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:11!null\n" + + " │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:8!null\n" + + " │ │ └─ cc.movie_id:27\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:16!null\n" + + " │ └─ mi_idx.info_type_id:9!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:21!null\n" + + " │ │ │ └─ mi.movie_id:11!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:11!null\n" + + " │ │ └─ cc.movie_id:27\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:18!null\n" + + " │ └─ mi.info_type_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + " │ ├─ Eq\n" + - " │ │ ├─ it1.id:10!null\n" + - " │ │ └─ mi.info_type_id:8!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ genres (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:7!null)\n" + - " ├─ right-key: TUPLE(mi_idx.movie_id:13!null)\n" + - " └─ HashJoin\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (16,17)\n" + + " │ └─ tableId: 5\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ mi_idx.movie_id:25!null\n" + - " │ └─ mk.movie_id:21!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:12!null\n" + - " │ │ └─ mk.movie_id:21!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:12!null\n" + - " │ │ │ └─ ci.movie_id:19!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ ├─ t.production_year:2\n" + - " │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title production_year]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:15!null\n" + - " │ │ │ └─ ci.person_id:18!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ n.gender:2\n" + - " │ │ │ │ └─ m (longtext)\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:23!null\n" + - " │ │ └─ mk.keyword_id:22!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mk.movie_id:21!null)\n" + - " ├─ right-key: TUPLE(mi_idx.movie_id:0!null)\n" + + " │ ├─ ci.movie_id:21!null\n" + + " │ └─ cc.movie_id:27\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ ci.note:2\n" + + " │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:23!null\n" + + " │ └─ cc.status_id:29!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ complete+verified (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ it2.id:28!null\n" + - " │ └─ mi_idx.info_type_id:26!null\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + + " │ ├─ cct1.id:25!null\n" + + " │ └─ cc.subject_id:28!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ TUPLE(cast (longtext), crew (longtext))\n" + + " │ └─ TableAlias(cct1)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ it2.info:1!null\n" + - " │ └─ votes (longtext)\n" + - " └─ TableAlias(it2)\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + " └─ Table\n" + - " ├─ name: info_type\n" + - " ├─ columns: [id info]\n" + - " ├─ colSet: (18,19)\n" + - " └─ tableId: 6\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as complete_violent_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (cct1.id = cc.subject_id)\n" + + " └─ InnerJoin\n" + + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + " ├─ Filter\n" + - " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + - " │ └─ TableAlias(cct1)\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct1.id)\n" + - " ├─ right-key: (cc.subject_id)\n" + - " └─ HashJoin\n" + - " ├─ (cct2.id = cc.status_id)\n" + - " ├─ Filter\n" + - " │ ├─ (cct2.kind = 'complete+verified')\n" + - " │ └─ TableAlias(cct2)\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct2.id)\n" + - " ├─ right-key: (cc.status_id)\n" + - " └─ HashJoin\n" + - " ├─ (ci.movie_id = cc.movie_id)\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cc.movie_id)\n" + - " ├─ right-key: (ci.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'genres')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi_idx.movie_id = mk.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = ci.movie_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title production_year]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (n.id = ci.person_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (n.gender = 'm')\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mk.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ci.movie_id = cc.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'votes')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as complete_violent_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (cct1.id = cc.subject_id)\n" + + " └─ InnerJoin\n" + + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + " ├─ Filter\n" + - " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + - " │ └─ TableAlias(cct1)\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct1.id)\n" + - " ├─ right-key: (cc.subject_id)\n" + - " └─ HashJoin\n" + - " ├─ (cct2.id = cc.status_id)\n" + - " ├─ Filter\n" + - " │ ├─ (cct2.kind = 'complete+verified')\n" + - " │ └─ TableAlias(cct2)\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct2.id)\n" + - " ├─ right-key: (cc.status_id)\n" + - " └─ HashJoin\n" + - " ├─ (ci.movie_id = cc.movie_id)\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cc.movie_id)\n" + - " ├─ right-key: (ci.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'genres')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi_idx.movie_id = mk.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = ci.movie_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (t.production_year > 2000)\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title production_year]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (n.id = ci.person_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (n.gender = 'm')\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mk.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ci.movie_id = cc.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'votes')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -25149,395 +24116,387 @@ WHERE cct1.kind IN ('cast', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->writer:0, min(t.title):3!null->complete_gore_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:9!null), MIN(mi_idx.info:27!null), MIN(n.name:16!null), MIN(t.title:13!null)\n" + + " ├─ select: MIN(mi.info:13!null), MIN(mi_idx.info:10!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ cct1.id:0!null\n" + - " │ └─ cc.subject_id:5!null\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:11!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:21!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ cc.movie_id:27\n" + " ├─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ cct1.kind:1!null\n" + - " │ │ └─ TUPLE(cast (longtext), crew (longtext))\n" + - " │ └─ TableAlias(cct1)\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThan\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2000 (int)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ Or\n" + + " │ │ │ ├─ t.title LIKE '%Freddy%'\n" + + " │ │ │ └─ t.title LIKE '%Jason%'\n" + + " │ │ └─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ Saw (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.title:1!null\n" + + " │ │ └─ Sawÿ (longtext)\n" + + " │ └─ TableAlias(t)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cct1.id:0!null)\n" + - " ├─ right-key: TUPLE(cc.subject_id:3!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ cct2.id:2!null\n" + - " │ └─ cc.status_id:6!null\n" + - " ├─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct2.kind:1!null\n" + - " │ │ └─ complete+verified (longtext)\n" + - " │ └─ TableAlias(cct2)\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:3!null\n" + + " │ └─ ci.person_id:20!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:2\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ ci.movie_id:21!null\n" + + " │ │ │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:11!null\n" + + " │ │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi_idx.movie_id:8!null\n" + + " │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:6!null\n" + + " │ │ └─ cc.movie_id:27\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:14!null\n" + + " │ └─ mk.keyword_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ ├─ columns: [id kind]\n" + - " │ ├─ colSet: (7,8)\n" + - " │ └─ tableId: 3\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cct2.id:2!null)\n" + - " ├─ right-key: TUPLE(cc.status_id:2!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ ci.movie_id:19!null\n" + - " │ └─ cc.movie_id:4\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cc.movie_id:4)\n" + - " ├─ right-key: TUPLE(ci.movie_id:12!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ mi.movie_id:7!null\n" + - " │ └─ mi_idx.movie_id:25!null\n" + - " ├─ InnerJoin\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:21!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:11!null\n" + + " │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:8!null\n" + + " │ │ └─ cc.movie_id:27\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:16!null\n" + + " │ └─ mi_idx.info_type_id:9!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:21!null\n" + + " │ │ │ └─ mi.movie_id:11!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:11!null\n" + + " │ │ └─ cc.movie_id:27\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:18!null\n" + + " │ └─ mi.info_type_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + " │ ├─ Eq\n" + - " │ │ ├─ it1.id:10!null\n" + - " │ │ └─ mi.info_type_id:8!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ genres (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:7!null)\n" + - " ├─ right-key: TUPLE(mi_idx.movie_id:13!null)\n" + - " └─ HashJoin\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (16,17)\n" + + " │ └─ tableId: 5\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ mi_idx.movie_id:25!null\n" + - " │ └─ mk.movie_id:21!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:12!null\n" + - " │ │ └─ mk.movie_id:21!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:12!null\n" + - " │ │ │ └─ ci.movie_id:19!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ GreaterThan\n" + - " │ │ │ │ │ ├─ t.production_year:2\n" + - " │ │ │ │ │ └─ 2000 (int)\n" + - " │ │ │ │ └─ Or\n" + - " │ │ │ │ ├─ Or\n" + - " │ │ │ │ │ ├─ t.title LIKE '%Freddy%'\n" + - " │ │ │ │ │ └─ t.title LIKE '%Jason%'\n" + - " │ │ │ │ └─ AND\n" + - " │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ ├─ t.title:1!null\n" + - " │ │ │ │ │ └─ Saw (longtext)\n" + - " │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ ├─ t.title:1!null\n" + - " │ │ │ │ └─ Sawÿ (longtext)\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title production_year]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:15!null\n" + - " │ │ │ └─ ci.person_id:18!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ n.gender:2\n" + - " │ │ │ │ └─ m (longtext)\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:23!null\n" + - " │ │ └─ mk.keyword_id:22!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mk.movie_id:21!null)\n" + - " ├─ right-key: TUPLE(mi_idx.movie_id:0!null)\n" + + " │ ├─ ci.movie_id:21!null\n" + + " │ └─ cc.movie_id:27\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ ci.note:2\n" + + " │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:23!null\n" + + " │ └─ cc.status_id:29!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ complete+verified (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ it2.id:28!null\n" + - " │ └─ mi_idx.info_type_id:26!null\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + + " │ ├─ cct1.id:25!null\n" + + " │ └─ cc.subject_id:28!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ TUPLE(cast (longtext), crew (longtext))\n" + + " │ └─ TableAlias(cct1)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ it2.info:1!null\n" + - " │ └─ votes (longtext)\n" + - " └─ TableAlias(it2)\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + " └─ Table\n" + - " ├─ name: info_type\n" + - " ├─ columns: [id info]\n" + - " ├─ colSet: (18,19)\n" + - " └─ tableId: 6\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as complete_gore_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (cct1.id = cc.subject_id)\n" + + " └─ InnerJoin\n" + + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + " ├─ Filter\n" + - " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + - " │ └─ TableAlias(cct1)\n" + + " │ ├─ ((t.production_year > 2000) AND ((t.title LIKE '%Freddy%' OR t.title LIKE '%Jason%') OR ((t.title >= 'Saw') AND (t.title <= 'Sawÿ'))))\n" + + " │ └─ TableAlias(t)\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct1.id)\n" + - " ├─ right-key: (cc.subject_id)\n" + - " └─ HashJoin\n" + - " ├─ (cct2.id = cc.status_id)\n" + - " ├─ Filter\n" + - " │ ├─ (cct2.kind = 'complete+verified')\n" + - " │ └─ TableAlias(cct2)\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct2.id)\n" + - " ├─ right-key: (cc.status_id)\n" + - " └─ HashJoin\n" + - " ├─ (ci.movie_id = cc.movie_id)\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cc.movie_id)\n" + - " ├─ right-key: (ci.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'genres')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi_idx.movie_id = mk.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = ci.movie_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((t.production_year > 2000) AND ((t.title LIKE '%Freddy%' OR t.title LIKE '%Jason%') OR ((t.title >= 'Saw') AND (t.title <= 'Sawÿ'))))\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title production_year]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (n.id = ci.person_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (n.gender = 'm')\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mk.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ci.movie_id = cc.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'votes')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as complete_gore_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (cct1.id = cc.subject_id)\n" + + " └─ InnerJoin\n" + + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + " ├─ Filter\n" + - " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + - " │ └─ TableAlias(cct1)\n" + + " │ ├─ ((t.production_year > 2000) AND ((t.title LIKE '%Freddy%' OR t.title LIKE '%Jason%') OR ((t.title >= 'Saw') AND (t.title <= 'Sawÿ'))))\n" + + " │ └─ TableAlias(t)\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct1.id)\n" + - " ├─ right-key: (cc.subject_id)\n" + - " └─ HashJoin\n" + - " ├─ (cct2.id = cc.status_id)\n" + - " ├─ Filter\n" + - " │ ├─ (cct2.kind = 'complete+verified')\n" + - " │ └─ TableAlias(cct2)\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct2.id)\n" + - " ├─ right-key: (cc.status_id)\n" + - " └─ HashJoin\n" + - " ├─ (ci.movie_id = cc.movie_id)\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cc.movie_id)\n" + - " ├─ right-key: (ci.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'genres')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi_idx.movie_id = mk.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = ci.movie_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((t.production_year > 2000) AND ((t.title LIKE '%Freddy%' OR t.title LIKE '%Jason%') OR ((t.title >= 'Saw') AND (t.title <= 'Sawÿ'))))\n" + - " │ │ │ └─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title production_year]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (n.id = ci.person_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (n.gender = 'm')\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mk.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ci.movie_id = cc.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'votes')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind HASH IN ('cast', 'crew'))\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -25607,375 +24566,367 @@ WHERE cct1.kind = 'cast' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->writer:0, min(t.title):3!null->complete_violent_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:9!null), MIN(mi_idx.info:26!null), MIN(n.name:15!null), MIN(t.title:13!null)\n" + + " ├─ select: MIN(mi.info:12!null), MIN(mi_idx.info:9!null), MIN(n.name:3!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ cct1.id:0!null\n" + - " │ └─ cc.subject_id:5!null\n" + - " ├─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct1.kind:1!null\n" + - " │ │ └─ cast (longtext)\n" + - " │ └─ TableAlias(cct1)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cct1.id:0!null)\n" + - " ├─ right-key: TUPLE(cc.subject_id:3!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ cct2.id:2!null\n" + - " │ └─ cc.status_id:6!null\n" + - " ├─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cct2.kind:1!null\n" + - " │ │ └─ complete+verified (longtext)\n" + - " │ └─ TableAlias(cct2)\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:10!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:20!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:2!null\n" + + " │ └─ ci.person_id:19!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:2\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ ci.movie_id:20!null\n" + + " │ │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:10!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi_idx.movie_id:7!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ cc.movie_id:26\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:13!null\n" + + " │ └─ mk.keyword_id:6!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ ├─ columns: [id kind]\n" + - " │ ├─ colSet: (7,8)\n" + - " │ └─ tableId: 3\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cct2.id:2!null)\n" + - " ├─ right-key: TUPLE(cc.status_id:2!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ ci.movie_id:18!null\n" + - " │ └─ cc.movie_id:4\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(cc.movie_id:4)\n" + - " ├─ right-key: TUPLE(ci.movie_id:11!null)\n" + - " └─ HashJoin\n" + - " ├─ Eq\n" + - " │ ├─ mi.movie_id:7!null\n" + - " │ └─ mi_idx.movie_id:24!null\n" + - " ├─ InnerJoin\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:20!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:10!null\n" + + " │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:7!null\n" + + " │ │ └─ cc.movie_id:26\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:15!null\n" + + " │ └─ mi_idx.info_type_id:8!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:20!null\n" + + " │ │ │ └─ mi.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:10!null\n" + + " │ │ └─ cc.movie_id:26\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:17!null\n" + + " │ └─ mi.info_type_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Horror (longtext), Action (longtext), Sci-Fi (longtext), Thriller (longtext), Crime (longtext), War (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + " │ ├─ Eq\n" + - " │ │ ├─ it1.id:10!null\n" + - " │ │ └─ mi.info_type_id:8!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Horror (longtext), Action (longtext), Sci-Fi (longtext), Thriller (longtext), Crime (longtext), War (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it1.info:1!null\n" + - " │ │ └─ genres (longtext)\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:7!null)\n" + - " ├─ right-key: TUPLE(mi_idx.movie_id:12!null)\n" + - " └─ HashJoin\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (16,17)\n" + + " │ └─ tableId: 5\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ mi_idx.movie_id:24!null\n" + - " │ └─ mk.movie_id:20!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:12!null\n" + - " │ │ └─ mk.movie_id:20!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t.id:12!null\n" + - " │ │ │ └─ ci.movie_id:18!null\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:14!null\n" + - " │ │ │ └─ ci.person_id:17!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ n.gender:2\n" + - " │ │ │ │ └─ m (longtext)\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:22!null\n" + - " │ │ └─ mk.keyword_id:21!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mk.movie_id:20!null)\n" + - " ├─ right-key: TUPLE(mi_idx.movie_id:0!null)\n" + + " │ ├─ ci.movie_id:20!null\n" + + " │ └─ cc.movie_id:26\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ ci.note:2\n" + + " │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cct2.id:22!null\n" + + " │ └─ cc.status_id:28!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct2.kind:1!null\n" + + " │ │ └─ complete+verified (longtext)\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ it2.id:27!null\n" + - " │ └─ mi_idx.info_type_id:25!null\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + + " │ ├─ cct1.id:24!null\n" + + " │ └─ cc.subject_id:27!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cct1.kind:1!null\n" + + " │ │ └─ cast (longtext)\n" + + " │ └─ TableAlias(cct1)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ it2.info:1!null\n" + - " │ └─ votes (longtext)\n" + - " └─ TableAlias(it2)\n" + + " │ ├─ name: comp_cast_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (5,6)\n" + + " │ └─ tableId: 2\n" + + " └─ TableAlias(cc)\n" + + " └─ ProcessTable\n" + " └─ Table\n" + - " ├─ name: info_type\n" + - " ├─ columns: [id info]\n" + - " ├─ colSet: (18,19)\n" + - " └─ tableId: 6\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as complete_violent_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (cct1.id = cc.subject_id)\n" + - " ├─ Filter\n" + - " │ ├─ (cct1.kind = 'cast')\n" + - " │ └─ TableAlias(cct1)\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct1.id)\n" + - " ├─ right-key: (cc.subject_id)\n" + - " └─ HashJoin\n" + - " ├─ (cct2.id = cc.status_id)\n" + - " ├─ Filter\n" + - " │ ├─ (cct2.kind = 'complete+verified')\n" + - " │ └─ TableAlias(cct2)\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct2.id)\n" + - " ├─ right-key: (cc.status_id)\n" + - " └─ HashJoin\n" + - " ├─ (ci.movie_id = cc.movie_id)\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cc.movie_id)\n" + - " ├─ right-key: (ci.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'genres')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi_idx.movie_id = mk.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = ci.movie_id)\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (n.id = ci.person_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (n.gender = 'm')\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mk.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + + " └─ InnerJoin\n" + + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ci.movie_id = cc.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'votes')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as complete_violent_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (cct1.id = cc.subject_id)\n" + - " ├─ Filter\n" + - " │ ├─ (cct1.kind = 'cast')\n" + - " │ └─ TableAlias(cct1)\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct1.id)\n" + - " ├─ right-key: (cc.subject_id)\n" + - " └─ HashJoin\n" + - " ├─ (cct2.id = cc.status_id)\n" + - " ├─ Filter\n" + - " │ ├─ (cct2.kind = 'complete+verified')\n" + - " │ └─ TableAlias(cct2)\n" + - " │ └─ Table\n" + - " │ ├─ name: comp_cast_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cct2.id)\n" + - " ├─ right-key: (cc.status_id)\n" + - " └─ HashJoin\n" + - " ├─ (ci.movie_id = cc.movie_id)\n" + - " ├─ TableAlias(cc)\n" + - " │ └─ Table\n" + - " │ ├─ name: complete_cast\n" + - " │ └─ columns: [movie_id subject_id status_id]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (cc.movie_id)\n" + - " ├─ right-key: (ci.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi.movie_id = mi_idx.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it1.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ Filter\n" + - " │ ├─ (it1.info = 'genres')\n" + - " │ └─ TableAlias(it1)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + - " └─ HashJoin\n" + - " ├─ (mi_idx.movie_id = mk.movie_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (t.id = ci.movie_id)\n" + - " │ │ ├─ TableAlias(t)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: title\n" + - " │ │ │ └─ columns: [id title]\n" + - " │ │ └─ InnerJoin\n" + - " │ │ ├─ (n.id = ci.person_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (n.gender = 'm')\n" + - " │ │ │ └─ TableAlias(n)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: name\n" + - " │ │ │ └─ columns: [id name gender]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mk.movie_id)\n" + - " ├─ right-key: (mi_idx.movie_id)\n" + + " └─ InnerJoin\n" + + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = cc.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = cc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = cc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = cc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ci.movie_id = cc.movie_id)\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note]\n" + + " └─ InnerJoin\n" + + " ├─ (cct2.id = cc.status_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct2.kind = 'complete+verified')\n" + + " │ └─ TableAlias(cct2)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + " └─ InnerJoin\n" + - " ├─ (it2.id = mi_idx.info_type_id)\n" + - " ├─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ Filter\n" + - " ├─ (it2.info = 'votes')\n" + - " └─ TableAlias(it2)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ (cct1.id = cc.subject_id)\n" + + " ├─ Filter\n" + + " │ ├─ (cct1.kind = 'cast')\n" + + " │ └─ TableAlias(cct1)\n" + + " │ └─ Table\n" + + " │ ├─ name: comp_cast_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ TableAlias(cc)\n" + + " └─ Table\n" + + " ├─ name: complete_cast\n" + + " └─ columns: [movie_id subject_id status_id]\n" + "", }, { @@ -26038,392 +24989,340 @@ WHERE ci.note IN ('(writer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->writer:0, min(t.title):3!null->violent_liongate_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:4!null), MIN(mi_idx.info:9!null), MIN(n.name:22!null), MIN(t.title:25!null)\n" + + " ├─ select: MIN(mi.info:12!null), MIN(mi_idx.info:9!null), MIN(n.name:3!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ t.id:24!null\n" + - " │ │ │ │ │ └─ mi.movie_id:2!null\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:10!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ t.id:24!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + " │ │ │ │ └─ mi_idx.movie_id:7!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:24!null\n" + - " │ │ │ └─ ci.movie_id:19!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:24!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:24!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:24!null\n" + - " │ └─ mc.movie_id:16!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:21!null\n" + - " │ │ └─ ci.person_id:18!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:8!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ votes (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:6!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ mi_idx.movie_id:7!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:5!null\n" + - " │ │ │ │ └─ mi.info_type_id:3!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ genres (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (15,16)\n" + - " │ │ │ └─ tableId: 3\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi.movie_id:2!null, mi.movie_id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.movie_id:9!null, mi_idx.movie_id:0!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi_idx.movie_id:7!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:7!null\n" + - " │ │ │ └─ mk.movie_id:14!null\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi_idx.movie_id:7!null, mi_idx.movie_id:7!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.movie_id:6!null, mk.movie_id:4!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:10!null\n" + - " │ │ │ └─ mk.keyword_id:15!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:10!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:12!null\n" + - " │ │ │ └─ mc.company_id:17!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ │ └─ Lionsgate (longtext)\n" + - " │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ └─ Lionsgateÿ (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:12!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:14!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:16!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:18!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.gender:2\n" + - " │ │ └─ m (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:2!null, mi_idx.movie_id:7!null, ci.movie_id:19!null, mk.movie_id:14!null, mc.movie_id:16!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:13!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:2!null\n" + + " │ └─ ci.person_id:23!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:2\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ ci.movie_id:24!null\n" + + " │ │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:10!null\n" + + " │ │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi_idx.movie_id:7!null\n" + + " │ │ │ └─ mk.movie_id:5!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:5!null\n" + + " │ │ └─ mc.movie_id:13!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:15!null\n" + + " │ └─ mk.keyword_id:6!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:24!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:10!null\n" + + " │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:7!null\n" + + " │ │ └─ mc.movie_id:13!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:17!null\n" + + " │ └─ mi_idx.info_type_id:8!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:24!null\n" + + " │ │ │ └─ mi.movie_id:10!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:10!null\n" + + " │ │ └─ mc.movie_id:13!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:19!null\n" + + " │ └─ mi.info_type_id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:24!null\n" + + " │ │ └─ mc.movie_id:13!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:21!null\n" + + " │ └─ mc.company_id:14!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (15,16)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ cn.name:1!null\n" + + " │ │ │ └─ Lionsgate (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ cn.name:1!null\n" + + " │ │ └─ Lionsgateÿ (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as violent_liongate_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + - " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi.movie_id, mi.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mi_idx.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi_idx.movie_id = mc.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mc.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = mc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = mc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as violent_liongate_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi.movie_id, mi.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mi_idx.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi_idx.movie_id = mc.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mc.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = mc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = mc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -26491,418 +25390,366 @@ WHERE ci.note IN ('(writer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->writer:0, min(t.title):3!null->violent_liongate_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:4!null), MIN(mi_idx.info:9!null), MIN(n.name:23!null), MIN(t.title:26!null)\n" + + " ├─ select: MIN(mi.info:13!null), MIN(mi_idx.info:10!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ t.id:25!null\n" + - " │ │ │ │ │ └─ mi.movie_id:2!null\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:11!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ t.id:25!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:8!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:25!null\n" + - " │ │ │ └─ ci.movie_id:20!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:26!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:25!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:6!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:25!null\n" + - " │ └─ mc.movie_id:16!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:22!null\n" + - " │ │ └─ ci.person_id:19!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:8!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ votes (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:6!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ mi_idx.movie_id:7!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:5!null\n" + - " │ │ │ │ └─ mi.info_type_id:3!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ genres (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (15,16)\n" + - " │ │ │ └─ tableId: 3\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi.movie_id:2!null, mi.movie_id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.movie_id:9!null, mi_idx.movie_id:0!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi_idx.movie_id:7!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:7!null\n" + - " │ │ │ └─ mk.movie_id:14!null\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi_idx.movie_id:7!null, mi_idx.movie_id:7!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.movie_id:6!null, mk.movie_id:4!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:10!null\n" + - " │ │ │ └─ mk.keyword_id:15!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:10!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:12!null\n" + - " │ │ │ └─ mc.company_id:17!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ │ └─ Lionsgate (longtext)\n" + - " │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ └─ Lionsgateÿ (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:12!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:14!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ mc.note LIKE '%(Blu-ray)%'\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:16!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:19!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.gender:2\n" + - " │ │ └─ m (longtext)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:2!null, mi_idx.movie_id:7!null, ci.movie_id:20!null, mk.movie_id:14!null, mc.movie_id:16!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ Filter\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:14!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThan\n" + + " │ │ │ ├─ t.production_year:2\n" + + " │ │ │ └─ 2000 (int)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ Or\n" + + " │ │ │ ├─ t.title LIKE '%Freddy%'\n" + + " │ │ │ └─ t.title LIKE '%Jason%'\n" + + " │ │ └─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t.title:1!null\n" + + " │ │ │ └─ Saw (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t.title:1!null\n" + + " │ │ └─ Sawÿ (longtext)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:3!null\n" + + " │ └─ ci.person_id:25!null\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.gender:2\n" + + " │ │ └─ m (longtext)\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ GreaterThan\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 2000 (int)\n" + - " │ └─ Or\n" + - " │ ├─ Or\n" + - " │ │ ├─ t.title LIKE '%Freddy%'\n" + - " │ │ └─ t.title LIKE '%Jason%'\n" + - " │ └─ AND\n" + - " │ ├─ GreaterThanOrEqual\n" + - " │ │ ├─ t.title:1!null\n" + - " │ │ └─ Saw (longtext)\n" + - " │ └─ LessThanOrEqual\n" + - " │ ├─ t.title:1!null\n" + - " │ └─ Sawÿ (longtext)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ ci.movie_id:26!null\n" + + " │ │ │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:11!null\n" + + " │ │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi_idx.movie_id:8!null\n" + + " │ │ │ └─ mk.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:6!null\n" + + " │ │ └─ mc.movie_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:17!null\n" + + " │ └─ mk.keyword_id:7!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:26!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:11!null\n" + + " │ │ │ └─ mi_idx.movie_id:8!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:8!null\n" + + " │ │ └─ mc.movie_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:19!null\n" + + " │ └─ mi_idx.info_type_id:9!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:26!null\n" + + " │ │ │ └─ mi.movie_id:11!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:11!null\n" + + " │ │ └─ mc.movie_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:21!null\n" + + " │ └─ mi.info_type_id:12!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Horror (longtext), Thriller (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:26!null\n" + + " │ │ └─ mc.movie_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:23!null\n" + + " │ └─ mc.company_id:15!null\n" + + " ├─ Filter\n" + + " │ ├─ mc.note LIKE '%(Blu-ray)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (15,16)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ cn.name:1!null\n" + + " │ │ │ └─ Lionsgate (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ cn.name:1!null\n" + + " │ │ └─ Lionsgateÿ (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as violent_liongate_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi.movie_id, mi.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mi_idx.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi_idx.movie_id = mc.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mc.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ mc.note LIKE '%(Blu-ray)%'\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year > 2000) AND ((t.title LIKE '%Freddy%' OR t.title LIKE '%Jason%') OR ((t.title >= 'Saw') AND (t.title <= 'Sawÿ'))))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year > 2000) AND ((t.title LIKE '%Freddy%' OR t.title LIKE '%Jason%') OR ((t.title >= 'Saw') AND (t.title <= 'Sawÿ'))))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = mc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = mc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note LIKE '%(Blu-ray)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as violent_liongate_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi.movie_id, mi.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mi_idx.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi_idx.movie_id = mc.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mc.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ mc.note LIKE '%(Blu-ray)%'\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id note]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ Filter\n" + - " │ ├─ (n.gender = 'm')\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name gender]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ Filter\n" + - " ├─ ((t.production_year > 2000) AND ((t.title LIKE '%Freddy%' OR t.title LIKE '%Jason%') OR ((t.title >= 'Saw') AND (t.title <= 'Sawÿ'))))\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title production_year]\n" + + " ├─ Filter\n" + + " │ ├─ ((t.production_year > 2000) AND ((t.title LIKE '%Freddy%' OR t.title LIKE '%Jason%') OR ((t.title >= 'Saw') AND (t.title <= 'Sawÿ'))))\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ Filter\n" + + " │ ├─ (n.gender = 'm')\n" + + " │ └─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = mc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = mc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Thriller'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ Filter\n" + + " │ ├─ mc.note LIKE '%(Blu-ray)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -26968,384 +25815,332 @@ WHERE ci.note IN ('(writer)', ExpectedPlan: "Project\n" + " ├─ columns: [min(mi.info):0!null->movie_budget:0, min(mi_idx.info):1!null->movie_votes:0, min(n.name):2!null->writer:0, min(t.title):3!null->violent_liongate_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi.info:4!null), MIN(mi_idx.info:9!null), MIN(n.name:22!null), MIN(t.title:24!null)\n" + + " ├─ select: MIN(mi.info:11!null), MIN(mi_idx.info:8!null), MIN(n.name:3!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + " │ │ ├─ AND\n" + " │ │ │ ├─ AND\n" + " │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ ├─ t.id:23!null\n" + - " │ │ │ │ │ └─ mi.movie_id:2!null\n" + + " │ │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ │ └─ mi.movie_id:9!null\n" + " │ │ │ │ └─ Eq\n" + - " │ │ │ │ ├─ t.id:23!null\n" + - " │ │ │ │ └─ mi_idx.movie_id:7!null\n" + + " │ │ │ │ ├─ t.id:0!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:6!null\n" + " │ │ │ └─ Eq\n" + - " │ │ │ ├─ t.id:23!null\n" + - " │ │ │ └─ ci.movie_id:19!null\n" + + " │ │ │ ├─ t.id:0!null\n" + + " │ │ │ └─ ci.movie_id:23!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t.id:23!null\n" + - " │ │ └─ mk.movie_id:14!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:4!null\n" + " │ └─ Eq\n" + - " │ ├─ t.id:23!null\n" + - " │ └─ mc.movie_id:16!null\n" + - " ├─ HashJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ n.id:21!null\n" + - " │ │ └─ ci.person_id:18!null\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:0!null\n" + - " │ │ │ └─ mi_idx.info_type_id:8!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ │ └─ votes (longtext)\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(it2.id:0!null)\n" + - " │ │ ├─ right-key: TUPLE(mi_idx.info_type_id:6!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi.movie_id:2!null\n" + - " │ │ │ └─ mi_idx.movie_id:7!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.id:5!null\n" + - " │ │ │ │ └─ mi.info_type_id:3!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ HashIn\n" + - " │ │ │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ │ │ └─ TUPLE(Horror (longtext), Action (longtext), Sci-Fi (longtext), Thriller (longtext), Crime (longtext), War (longtext))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ │ └─ genres (longtext)\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ ├─ columns: [id info]\n" + - " │ │ │ ├─ colSet: (15,16)\n" + - " │ │ │ └─ tableId: 3\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi.movie_id:2!null, mi.movie_id:2!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.movie_id:9!null, mi_idx.movie_id:0!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mi_idx.movie_id:7!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ └─ Eq\n" + - " │ │ │ ├─ mi_idx.movie_id:7!null\n" + - " │ │ │ └─ mk.movie_id:14!null\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(mi_idx.movie_id:7!null, mi_idx.movie_id:7!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.movie_id:6!null, mk.movie_id:4!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ k.id:10!null\n" + - " │ │ │ └─ mk.keyword_id:15!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ k.keyword:1!null\n" + - " │ │ │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(k.id:10!null)\n" + - " │ │ ├─ right-key: TUPLE(mk.keyword_id:3!null)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn.id:12!null\n" + - " │ │ │ └─ mc.company_id:17!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ │ └─ Lionsgate (longtext)\n" + - " │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ ├─ cn.name:1!null\n" + - " │ │ │ │ └─ Lionsgateÿ (longtext)\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: TUPLE(cn.id:12!null)\n" + - " │ │ ├─ right-key: TUPLE(mc.company_id:3!null)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ mk.movie_id:14!null\n" + - " │ │ │ │ └─ mc.movie_id:16!null\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ keys: [mc.movie_id:16!null]\n" + - " │ │ ├─ colSet: (1-7)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note]\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: TUPLE(ci.person_id:18!null)\n" + - " │ ├─ right-key: TUPLE(n.id:0!null)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: TUPLE(mi.movie_id:2!null, mi_idx.movie_id:7!null, ci.movie_id:19!null, mk.movie_id:14!null, mc.movie_id:16!null)\n" + - " ├─ right-key: TUPLE(t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null, t.id:0!null)\n" + - " └─ TableAlias(t)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:12!null\n" + + " ├─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ n.id:2!null\n" + + " │ └─ ci.person_id:22!null\n" + + " ├─ TableAlias(n)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ ci.movie_id:23!null\n" + + " │ │ │ │ │ └─ mk.movie_id:4!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ │ └─ mk.movie_id:4!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi_idx.movie_id:6!null\n" + + " │ │ │ └─ mk.movie_id:4!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mk.movie_id:4!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:14!null\n" + + " │ └─ mk.keyword_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:23!null\n" + + " │ │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ mi.movie_id:9!null\n" + + " │ │ │ └─ mi_idx.movie_id:6!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi_idx.movie_id:6!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ it2.id:16!null\n" + + " │ └─ mi_idx.info_type_id:7!null\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.movie_id:23!null\n" + + " │ │ │ └─ mi.movie_id:9!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ mi.movie_id:9!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ it1.id:18!null\n" + + " │ └─ mi.info_type_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Horror (longtext), Action (longtext), Sci-Fi (longtext), Thriller (longtext), Crime (longtext), War (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.movie_id:23!null\n" + + " │ │ └─ mc.movie_id:12!null\n" + + " │ └─ Eq\n" + + " │ ├─ cn.id:20!null\n" + + " │ └─ mc.company_id:13!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(murder (longtext), violence (longtext), blood (longtext), gore (longtext), death (longtext), female-nudity (longtext), hospital (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ votes (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ genres (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (15,16)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ cn.name:1!null\n" + + " │ │ │ └─ Lionsgate (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ cn.name:1!null\n" + + " │ │ └─ Lionsgateÿ (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ HashIn\n" + + " │ ├─ ci.note:2\n" + + " │ └─ TUPLE((writer) (longtext), (head writer) (longtext), (written by) (longtext), (story) (longtext), (story editor) (longtext))\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as violent_liongate_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi.movie_id, mi.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mi_idx.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi_idx.movie_id = mc.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mc.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = mc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = mc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi.info) as movie_budget, min(mi_idx.info) as movie_votes, min(n.name) as writer, min(t.title) as violent_liongate_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(mi.info), MIN(mi_idx.info), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ HashJoin\n" + + " └─ InnerJoin\n" + " ├─ (((((t.id = mi.movie_id) AND (t.id = mi_idx.movie_id)) AND (t.id = ci.movie_id)) AND (t.id = mk.movie_id)) AND (t.id = mc.movie_id))\n" + - " ├─ HashJoin\n" + - " │ ├─ (n.id = ci.person_id)\n" + - " │ ├─ HashJoin\n" + - " │ │ ├─ (it2.id = mi_idx.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (it2.info = 'votes')\n" + - " │ │ │ └─ TableAlias(it2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (it2.id)\n" + - " │ │ ├─ right-key: (mi_idx.info_type_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi.movie_id = mc.movie_id) AND (mi.movie_id = mi_idx.movie_id))\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (it1.id = mi.info_type_id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + - " │ │ │ │ └─ TableAlias(mi)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_info\n" + - " │ │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ │ └─ Filter\n" + - " │ │ │ ├─ (it1.info = 'genres')\n" + - " │ │ │ └─ TableAlias(it1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: info_type\n" + - " │ │ │ └─ columns: [id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi.movie_id, mi.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mi_idx.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ ((mi_idx.movie_id = mc.movie_id) AND (mi_idx.movie_id = mk.movie_id))\n" + - " │ │ ├─ TableAlias(mi_idx)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (mi_idx.movie_id, mi_idx.movie_id)\n" + - " │ │ ├─ right-key: (mc.movie_id, mk.movie_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (k.id = mk.keyword_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + - " │ │ │ └─ TableAlias(k)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: keyword\n" + - " │ │ │ └─ columns: [id keyword]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (k.id)\n" + - " │ │ ├─ right-key: (mk.keyword_id)\n" + - " │ │ └─ HashJoin\n" + - " │ │ ├─ (cn.id = mc.company_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + - " │ │ │ └─ TableAlias(cn)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: company_name\n" + - " │ │ │ └─ columns: [id name]\n" + - " │ │ └─ HashLookup\n" + - " │ │ ├─ left-key: (cn.id)\n" + - " │ │ ├─ right-key: (mc.company_id)\n" + - " │ │ └─ LookupJoin\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (mk.movie_id = mc.movie_id)\n" + - " │ │ │ ├─ TableAlias(mk)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: movie_keyword\n" + - " │ │ │ │ └─ columns: [movie_id keyword_id]\n" + - " │ │ │ └─ TableAlias(mc)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ IndexedTableAccess(cast_info)\n" + - " │ │ ├─ index: [cast_info.movie_id]\n" + - " │ │ ├─ columns: [person_id movie_id note]\n" + - " │ │ └─ keys: mc.movie_id\n" + - " │ └─ HashLookup\n" + - " │ ├─ left-key: (ci.person_id)\n" + - " │ ├─ right-key: (n.id)\n" + - " │ └─ TableAlias(n)\n" + - " │ └─ Table\n" + - " │ ├─ name: name\n" + - " │ └─ columns: [id name]\n" + - " └─ HashLookup\n" + - " ├─ left-key: (mi.movie_id, mi_idx.movie_id, ci.movie_id, mk.movie_id, mc.movie_id)\n" + - " ├─ right-key: (t.id, t.id, t.id, t.id, t.id)\n" + - " └─ TableAlias(t)\n" + - " └─ Table\n" + - " ├─ name: title\n" + - " └─ columns: [id title]\n" + + " ├─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + + " └─ InnerJoin\n" + + " ├─ (n.id = ci.person_id)\n" + + " ├─ TableAlias(n)\n" + + " │ └─ Table\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name]\n" + + " └─ InnerJoin\n" + + " ├─ (((((ci.movie_id = mk.movie_id) AND (mi.movie_id = mk.movie_id)) AND (mi_idx.movie_id = mk.movie_id)) AND (mk.movie_id = mc.movie_id)) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((((ci.movie_id = mi_idx.movie_id) AND (mi.movie_id = mi_idx.movie_id)) AND (mi_idx.movie_id = mc.movie_id)) AND (it2.id = mi_idx.info_type_id))\n" + + " ├─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (((ci.movie_id = mi.movie_id) AND (mi.movie_id = mc.movie_id)) AND (it1.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Horror', 'Action', 'Sci-Fi', 'Thriller', 'Crime', 'War'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (cn.id = mc.company_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('murder', 'violence', 'blood', 'gore', 'death', 'female-nudity', 'hospital'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'votes')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'genres')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ ((cn.name >= 'Lionsgate') AND (cn.name <= 'Lionsgateÿ'))\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (ci.note HASH IN ('(writer)', '(head writer)', '(written by)', '(story)', '(story editor)'))\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id note]\n" + "", }, { @@ -27371,47 +26166,29 @@ WHERE k.keyword ='10,000-mile-club' ExpectedPlan: "Project\n" + " ├─ columns: [min(lt.link):0!null->link_type:0, min(t1.title):1!null->first_movie:0, min(t2.title):2!null->second_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(lt.link:6!null), MIN(t1.title:8!null), MIN(t2.title:1!null)\n" + + " ├─ select: MIN(lt.link:10!null), MIN(t1.title:3!null), MIN(t2.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:2!null\n" + - " │ │ └─ t1.id:7!null\n" + - " │ └─ Eq\n" + - " │ ├─ mk.movie_id:9!null\n" + - " │ └─ ml.movie_id:2!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.linked_movie_id:3!null\n" + - " │ │ └─ t2.id:0!null\n" + - " │ ├─ TableAlias(t2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ lt.id:5!null\n" + - " │ │ └─ ml.link_type_id:4!null\n" + - " │ ├─ TableAlias(ml)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_link\n" + - " │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ └─ TableAlias(lt)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: link_type\n" + - " │ └─ columns: [id link]\n" + + " ├─ Eq\n" + + " │ ├─ ml.linked_movie_id:5!null\n" + + " │ └─ t2.id:0!null\n" + + " ├─ TableAlias(t2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t1.id:7!null\n" + - " │ │ └─ mk.movie_id:9!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ t1.id:2!null\n" + + " │ │ │ └─ mk.movie_id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:4!null\n" + + " │ │ └─ t1.id:2!null\n" + " │ └─ Eq\n" + - " │ ├─ mk.movie_id:9!null\n" + - " │ └─ t1.id:7!null\n" + + " │ ├─ mk.movie_id:7!null\n" + + " │ └─ t1.id:2!null\n" + " ├─ TableAlias(t1)\n" + " │ └─ Table\n" + " │ ├─ name: title\n" + @@ -27419,23 +26196,42 @@ WHERE k.keyword ='10,000-mile-club' " │ ├─ colSet: (13-24)\n" + " │ └─ tableId: 5\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mk.keyword_id:10!null\n" + - " │ └─ k.id:11!null\n" + - " ├─ TableAlias(mk)\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ lt.id:9!null\n" + + " │ │ └─ ml.link_type_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:7!null\n" + + " │ └─ ml.movie_id:4!null\n" + + " ├─ TableAlias(ml)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ k.keyword:1!null\n" + - " │ └─ 10,000-mile-club (longtext)\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " │ ├─ mk.keyword_id:8!null\n" + + " │ └─ k.id:11!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ k.keyword:1!null\n" + + " │ └─ 10,000-mile-club (longtext)\n" + + " └─ TableAlias(k)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(lt.link) as link_type, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -27443,41 +26239,40 @@ WHERE k.keyword ='10,000-mile-club' " ├─ SelectedExprs(MIN(lt.link), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ml.movie_id = t1.id) AND (mk.movie_id = ml.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.linked_movie_id = t2.id)\n" + - " │ ├─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ TableAlias(ml)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_link\n" + - " │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ └─ TableAlias(lt)\n" + - " │ └─ Table\n" + - " │ ├─ name: link_type\n" + - " │ └─ columns: [id link]\n" + + " ├─ (ml.linked_movie_id = t2.id)\n" + + " ├─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + - " ├─ ((t1.id = mk.movie_id) AND (mk.movie_id = t1.id))\n" + + " ├─ (((t1.id = mk.movie_id) AND (ml.movie_id = t1.id)) AND (mk.movie_id = t1.id))\n" + " ├─ TableAlias(t1)\n" + " │ └─ Table\n" + " │ ├─ name: title\n" + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + - " ├─ (mk.keyword_id = k.id)\n" + - " ├─ TableAlias(mk)\n" + + " ├─ ((lt.id = ml.link_type_id) AND (mk.movie_id = ml.movie_id))\n" + + " ├─ TableAlias(ml)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword = '10,000-mile-club')\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mk.keyword_id = k.id)\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ Filter\n" + + " ├─ (k.keyword = '10,000-mile-club')\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(lt.link) as link_type, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -27485,41 +26280,40 @@ WHERE k.keyword ='10,000-mile-club' " ├─ SelectedExprs(MIN(lt.link), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ml.movie_id = t1.id) AND (mk.movie_id = ml.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.linked_movie_id = t2.id)\n" + - " │ ├─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ TableAlias(ml)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_link\n" + - " │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ └─ TableAlias(lt)\n" + - " │ └─ Table\n" + - " │ ├─ name: link_type\n" + - " │ └─ columns: [id link]\n" + + " ├─ (ml.linked_movie_id = t2.id)\n" + + " ├─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + - " ├─ ((t1.id = mk.movie_id) AND (mk.movie_id = t1.id))\n" + + " ├─ (((t1.id = mk.movie_id) AND (ml.movie_id = t1.id)) AND (mk.movie_id = t1.id))\n" + " ├─ TableAlias(t1)\n" + " │ └─ Table\n" + " │ ├─ name: title\n" + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + - " ├─ (mk.keyword_id = k.id)\n" + - " ├─ TableAlias(mk)\n" + + " ├─ ((lt.id = ml.link_type_id) AND (mk.movie_id = ml.movie_id))\n" + + " ├─ TableAlias(ml)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword = '10,000-mile-club')\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mk.keyword_id = k.id)\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ Filter\n" + + " ├─ (k.keyword = '10,000-mile-club')\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", }, { @@ -27545,47 +26339,29 @@ WHERE k.keyword ='character-name-in-title' ExpectedPlan: "Project\n" + " ├─ columns: [min(lt.link):0!null->link_type:0, min(t1.title):1!null->first_movie:0, min(t2.title):2!null->second_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(lt.link:6!null), MIN(t1.title:8!null), MIN(t2.title:1!null)\n" + + " ├─ select: MIN(lt.link:10!null), MIN(t1.title:3!null), MIN(t2.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.movie_id:2!null\n" + - " │ │ └─ t1.id:7!null\n" + - " │ └─ Eq\n" + - " │ ├─ mk.movie_id:9!null\n" + - " │ └─ ml.movie_id:2!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ml.linked_movie_id:3!null\n" + - " │ │ └─ t2.id:0!null\n" + - " │ ├─ TableAlias(t2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ lt.id:5!null\n" + - " │ │ └─ ml.link_type_id:4!null\n" + - " │ ├─ TableAlias(ml)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_link\n" + - " │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ └─ TableAlias(lt)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: link_type\n" + - " │ └─ columns: [id link]\n" + + " ├─ Eq\n" + + " │ ├─ ml.linked_movie_id:5!null\n" + + " │ └─ t2.id:0!null\n" + + " ├─ TableAlias(t2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t1.id:7!null\n" + - " │ │ └─ mk.movie_id:9!null\n" + + " │ ├─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ t1.id:2!null\n" + + " │ │ │ └─ mk.movie_id:7!null\n" + + " │ │ └─ Eq\n" + + " │ │ ├─ ml.movie_id:4!null\n" + + " │ │ └─ t1.id:2!null\n" + " │ └─ Eq\n" + - " │ ├─ mk.movie_id:9!null\n" + - " │ └─ t1.id:7!null\n" + + " │ ├─ mk.movie_id:7!null\n" + + " │ └─ t1.id:2!null\n" + " ├─ TableAlias(t1)\n" + " │ └─ Table\n" + " │ ├─ name: title\n" + @@ -27593,23 +26369,42 @@ WHERE k.keyword ='character-name-in-title' " │ ├─ colSet: (13-24)\n" + " │ └─ tableId: 5\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mk.keyword_id:10!null\n" + - " │ └─ k.id:11!null\n" + - " ├─ TableAlias(mk)\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ lt.id:9!null\n" + + " │ │ └─ ml.link_type_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ mk.movie_id:7!null\n" + + " │ └─ ml.movie_id:4!null\n" + + " ├─ TableAlias(ml)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ k.keyword:1!null\n" + - " │ └─ character-name-in-title (longtext)\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " │ ├─ mk.keyword_id:8!null\n" + + " │ └─ k.id:11!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ k.keyword:1!null\n" + + " │ └─ character-name-in-title (longtext)\n" + + " └─ TableAlias(k)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(lt.link) as link_type, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -27617,41 +26412,40 @@ WHERE k.keyword ='character-name-in-title' " ├─ SelectedExprs(MIN(lt.link), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ml.movie_id = t1.id) AND (mk.movie_id = ml.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.linked_movie_id = t2.id)\n" + - " │ ├─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ TableAlias(ml)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_link\n" + - " │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ └─ TableAlias(lt)\n" + - " │ └─ Table\n" + - " │ ├─ name: link_type\n" + - " │ └─ columns: [id link]\n" + + " ├─ (ml.linked_movie_id = t2.id)\n" + + " ├─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + - " ├─ ((t1.id = mk.movie_id) AND (mk.movie_id = t1.id))\n" + + " ├─ (((t1.id = mk.movie_id) AND (ml.movie_id = t1.id)) AND (mk.movie_id = t1.id))\n" + " ├─ TableAlias(t1)\n" + " │ └─ Table\n" + " │ ├─ name: title\n" + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + - " ├─ (mk.keyword_id = k.id)\n" + - " ├─ TableAlias(mk)\n" + + " ├─ ((lt.id = ml.link_type_id) AND (mk.movie_id = ml.movie_id))\n" + + " ├─ TableAlias(ml)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword = 'character-name-in-title')\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mk.keyword_id = k.id)\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ Filter\n" + + " ├─ (k.keyword = 'character-name-in-title')\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(lt.link) as link_type, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -27659,41 +26453,40 @@ WHERE k.keyword ='character-name-in-title' " ├─ SelectedExprs(MIN(lt.link), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ml.movie_id = t1.id) AND (mk.movie_id = ml.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ml.linked_movie_id = t2.id)\n" + - " │ ├─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (lt.id = ml.link_type_id)\n" + - " │ ├─ TableAlias(ml)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_link\n" + - " │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ └─ TableAlias(lt)\n" + - " │ └─ Table\n" + - " │ ├─ name: link_type\n" + - " │ └─ columns: [id link]\n" + + " ├─ (ml.linked_movie_id = t2.id)\n" + + " ├─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + - " ├─ ((t1.id = mk.movie_id) AND (mk.movie_id = t1.id))\n" + + " ├─ (((t1.id = mk.movie_id) AND (ml.movie_id = t1.id)) AND (mk.movie_id = t1.id))\n" + " ├─ TableAlias(t1)\n" + " │ └─ Table\n" + " │ ├─ name: title\n" + " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + - " ├─ (mk.keyword_id = k.id)\n" + - " ├─ TableAlias(mk)\n" + + " ├─ ((lt.id = ml.link_type_id) AND (mk.movie_id = ml.movie_id))\n" + + " ├─ TableAlias(ml)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_keyword\n" + - " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ (k.keyword = 'character-name-in-title')\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ (mk.keyword_id = k.id)\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ Filter\n" + + " ├─ (k.keyword = 'character-name-in-title')\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", }, { @@ -27752,187 +26545,202 @@ WHERE cn1.country_code = '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn1.name):0!null->first_company:0, min(cn2.name):1!null->second_company:0, min(mi_idx1.info):2!null->first_rating:0, min(mi_idx2.info):3!null->second_rating:0, min(t1.title):4!null->first_movie:0, min(t2.title):5!null->second_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn1.name:31!null), MIN(cn2.name:29!null), MIN(mi_idx1.info:23!null), MIN(mi_idx2.info:18!null), MIN(t1.title:7!null), MIN(t2.title:1!null)\n" + + " ├─ select: MIN(cn1.name:33!null), MIN(cn2.name:31!null), MIN(mi_idx1.info:15!null), MIN(mi_idx2.info:12!null), MIN(t1.title:5!null), MIN(t2.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t2.id:0!null\n" + - " │ │ │ └─ ml.linked_movie_id:12!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ t2.id:0!null\n" + + " │ │ │ │ └─ ml.linked_movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t2.id:0!null\n" + + " │ │ │ └─ mi_idx2.movie_id:10!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t2.id:0!null\n" + - " │ │ └─ mi_idx2.movie_id:16!null\n" + + " │ │ ├─ kt2.id:22!null\n" + + " │ │ └─ t2.kind_id:2!null\n" + " │ └─ Eq\n" + " │ ├─ t2.id:0!null\n" + - " │ └─ mc2.movie_id:26!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt2.id:4!null\n" + - " │ │ └─ t2.kind_id:2!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ ├─ t2.production_year:3\n" + - " │ │ │ │ └─ 2005 (smallint)\n" + - " │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ ├─ t2.production_year:3\n" + - " │ │ │ └─ 2008 (smallint)\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ kt2.kind:1!null\n" + - " │ │ └─ TUPLE(tv series (longtext))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t2.production_year:3\n" + + " │ │ │ └─ 2005 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t2.production_year:3\n" + + " │ │ └─ 2008 (smallint)\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t1.id:6!null\n" + - " │ │ │ └─ ml.movie_id:11!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ t1.id:4!null\n" + + " │ │ │ │ └─ ml.movie_id:7!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t1.id:4!null\n" + + " │ │ │ └─ mi_idx1.movie_id:13!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t1.id:6!null\n" + - " │ │ └─ mi_idx1.movie_id:21!null\n" + + " │ │ ├─ kt1.id:24!null\n" + + " │ │ └─ t1.kind_id:6!null\n" + " │ └─ Eq\n" + - " │ ├─ t1.id:6!null\n" + - " │ └─ mc1.movie_id:33!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt1.id:9!null\n" + - " │ │ └─ t1.kind_id:8!null\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ ├─ columns: [id title kind_id]\n" + - " │ │ ├─ colSet: (49-60)\n" + - " │ │ └─ tableId: 13\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ kt1.kind:1!null\n" + - " │ │ └─ TUPLE(tv series (longtext))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ ├─ columns: [id kind]\n" + - " │ ├─ colSet: (19,20)\n" + - " │ └─ tableId: 5\n" + + " │ ├─ t1.id:4!null\n" + + " │ └─ mc1.movie_id:18!null\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ ├─ columns: [id title kind_id]\n" + + " │ ├─ colSet: (49-60)\n" + + " │ └─ tableId: 13\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi_idx1.movie_id:21!null\n" + - " │ │ └─ mc1.movie_id:33!null\n" + - " │ └─ Eq\n" + - " │ ├─ ml.movie_id:11!null\n" + - " │ └─ mc1.movie_id:33!null\n" + - " ├─ InnerJoin\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:11!null\n" + - " │ │ │ └─ mi_idx1.movie_id:21!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ lt.id:20!null\n" + + " │ │ │ │ │ └─ ml.link_type_id:9!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:7!null\n" + + " │ │ │ │ └─ mi_idx1.movie_id:13!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:7!null\n" + + " │ │ │ └─ mc1.movie_id:18!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ ml.linked_movie_id:12!null\n" + - " │ │ └─ mi_idx2.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ lt.id:14!null\n" + - " │ │ │ └─ ml.link_type_id:13!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ lt.link:1!null\n" + - " │ │ │ └─ TUPLE(sequel (longtext), follows (longtext), followed by (longtext))\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:19!null\n" + - " │ │ │ └─ mi_idx2.info_type_id:17!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx2.info:2!null\n" + - " │ │ │ │ └─ 3.0 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:24!null\n" + - " │ │ │ └─ mi_idx1.info_type_id:22!null\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ ├─ colSet: (35-39)\n" + - " │ │ │ └─ tableId: 10\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ ├─ columns: [id info]\n" + - " │ │ ├─ colSet: (15,16)\n" + - " │ │ └─ tableId: 3\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn2.id:28!null\n" + - " │ │ │ └─ mc2.company_id:27!null\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cn1.country_code:2\n" + - " │ │ └─ [us] (longtext)\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ ├─ columns: [id name country_code]\n" + - " │ ├─ colSet: (1-7)\n" + - " │ └─ tableId: 1\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " ├─ columns: [movie_id company_id]\n" + - " ├─ colSet: (25-29)\n" + - " └─ tableId: 8\n" + + " │ │ ├─ ml.linked_movie_id:8!null\n" + + " │ │ └─ mi_idx2.movie_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.linked_movie_id:8!null\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.id:26!null\n" + + " │ │ └─ mi_idx2.info_type_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi_idx2.movie_id:10!null\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx2.info:2!null\n" + + " │ │ └─ 3.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.id:28!null\n" + + " │ │ └─ mi_idx1.info_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi_idx1.movie_id:13!null\n" + + " │ └─ mc1.movie_id:18!null\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ ├─ columns: [movie_id info_type_id info]\n" + + " │ ├─ colSet: (35-39)\n" + + " │ └─ tableId: 10\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cn2.id:30!null\n" + + " │ └─ mc2.company_id:17!null\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cn1.id:32!null\n" + + " │ └─ mc1.company_id:19!null\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ ├─ columns: [movie_id company_id]\n" + + " │ ├─ colSet: (25-29)\n" + + " │ └─ tableId: 8\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ lt.link:1!null\n" + + " │ │ └─ TUPLE(sequel (longtext), follows (longtext), followed by (longtext))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt2.kind:1!null\n" + + " │ │ └─ TUPLE(tv series (longtext))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt1.kind:1!null\n" + + " │ │ └─ TUPLE(tv series (longtext))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (19,20)\n" + + " │ └─ tableId: 5\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (15,16)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn1.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " ├─ columns: [id name country_code]\n" + + " ├─ colSet: (1-7)\n" + + " └─ tableId: 1\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn1.name) as first_company, min(cn2.name) as second_company, min(mi_idx1.info) as first_rating, min(mi_idx2.info) as second_rating, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -27940,100 +26748,97 @@ WHERE cn1.country_code = '[us]' " ├─ SelectedExprs(MIN(cn1.name), MIN(cn2.name), MIN(mi_idx1.info), MIN(mi_idx2.info), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (t2.id = mc2.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt2.id = t2.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t2.production_year >= 2005) AND (t2.production_year <= 2008))\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt2.kind HASH IN ('tv series'))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (t1.id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt1.id = t1.kind_id)\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt1.kind HASH IN ('tv series'))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ ((mi_idx1.movie_id = mc1.movie_id) AND (ml.movie_id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((ml.movie_id = mi_idx1.movie_id) AND (ml.linked_movie_id = mi_idx2.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (lt.link HASH IN ('sequel', 'follows', 'followed by'))\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx2.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx2.info < '3.0')\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi_idx1.info_type_id)\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'rating')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn2.id = mc2.company_id)\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ (cn1.country_code = '[us]')\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ └─ columns: [id name country_code]\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " └─ columns: [movie_id company_id]\n" + + " ├─ ((((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (kt2.id = t2.kind_id)) AND (t2.id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t2.production_year >= 2005) AND (t2.production_year <= 2008))\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (kt1.id = t1.kind_id)) AND (t1.id = mc1.movie_id))\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mi_idx1.movie_id)) AND (ml.movie_id = mc1.movie_id)) AND (ml.linked_movie_id = mi_idx2.movie_id)) AND (ml.linked_movie_id = mc2.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi_idx2.info_type_id) AND (mi_idx2.movie_id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx2.info < '3.0')\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it1.id = mi_idx1.info_type_id) AND (mi_idx1.movie_id = mc1.movie_id))\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (cn2.id = mc2.company_id)\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn1.id = mc1.company_id)\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (lt.link HASH IN ('sequel', 'follows', 'followed by'))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt2.kind HASH IN ('tv series'))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt1.kind HASH IN ('tv series'))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'rating')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (cn1.country_code = '[us]')\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn1.name) as first_company, min(cn2.name) as second_company, min(mi_idx1.info) as first_rating, min(mi_idx2.info) as second_rating, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -28041,100 +26846,97 @@ WHERE cn1.country_code = '[us]' " ├─ SelectedExprs(MIN(cn1.name), MIN(cn2.name), MIN(mi_idx1.info), MIN(mi_idx2.info), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (t2.id = mc2.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt2.id = t2.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t2.production_year >= 2005) AND (t2.production_year <= 2008))\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt2.kind HASH IN ('tv series'))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (t1.id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt1.id = t1.kind_id)\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt1.kind HASH IN ('tv series'))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ ((mi_idx1.movie_id = mc1.movie_id) AND (ml.movie_id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((ml.movie_id = mi_idx1.movie_id) AND (ml.linked_movie_id = mi_idx2.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (lt.link HASH IN ('sequel', 'follows', 'followed by'))\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx2.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx2.info < '3.0')\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi_idx1.info_type_id)\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'rating')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn2.id = mc2.company_id)\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ (cn1.country_code = '[us]')\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ └─ columns: [id name country_code]\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " └─ columns: [movie_id company_id]\n" + + " ├─ ((((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (kt2.id = t2.kind_id)) AND (t2.id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t2.production_year >= 2005) AND (t2.production_year <= 2008))\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (kt1.id = t1.kind_id)) AND (t1.id = mc1.movie_id))\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mi_idx1.movie_id)) AND (ml.movie_id = mc1.movie_id)) AND (ml.linked_movie_id = mi_idx2.movie_id)) AND (ml.linked_movie_id = mc2.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi_idx2.info_type_id) AND (mi_idx2.movie_id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx2.info < '3.0')\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it1.id = mi_idx1.info_type_id) AND (mi_idx1.movie_id = mc1.movie_id))\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (cn2.id = mc2.company_id)\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn1.id = mc1.company_id)\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (lt.link HASH IN ('sequel', 'follows', 'followed by'))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt2.kind HASH IN ('tv series'))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt1.kind HASH IN ('tv series'))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'rating')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (cn1.country_code = '[us]')\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -28191,181 +26993,196 @@ WHERE cn1.country_code = '[nl]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn1.name):0!null->first_company:0, min(cn2.name):1!null->second_company:0, min(mi_idx1.info):2!null->first_rating:0, min(mi_idx2.info):3!null->second_rating:0, min(t1.title):4!null->first_movie:0, min(t2.title):5!null->second_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn1.name:31!null), MIN(cn2.name:29!null), MIN(mi_idx1.info:23!null), MIN(mi_idx2.info:18!null), MIN(t1.title:7!null), MIN(t2.title:1!null)\n" + + " ├─ select: MIN(cn1.name:33!null), MIN(cn2.name:31!null), MIN(mi_idx1.info:15!null), MIN(mi_idx2.info:12!null), MIN(t1.title:5!null), MIN(t2.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t2.id:0!null\n" + - " │ │ │ └─ ml.linked_movie_id:12!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ t2.id:0!null\n" + + " │ │ │ │ └─ ml.linked_movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t2.id:0!null\n" + + " │ │ │ └─ mi_idx2.movie_id:10!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t2.id:0!null\n" + - " │ │ └─ mi_idx2.movie_id:16!null\n" + + " │ │ ├─ kt2.id:22!null\n" + + " │ │ └─ t2.kind_id:2!null\n" + " │ └─ Eq\n" + " │ ├─ t2.id:0!null\n" + - " │ └─ mc2.movie_id:26!null\n" + - " ├─ InnerJoin\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ Filter\n" + " │ ├─ Eq\n" + - " │ │ ├─ kt2.id:4!null\n" + - " │ │ └─ t2.kind_id:2!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t2.production_year:3\n" + - " │ │ │ └─ 2007 (int)\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ kt2.kind:1!null\n" + - " │ │ └─ TUPLE(tv series (longtext))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + + " │ │ ├─ t2.production_year:3\n" + + " │ │ └─ 2007 (int)\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t1.id:6!null\n" + - " │ │ │ └─ ml.movie_id:11!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ t1.id:4!null\n" + + " │ │ │ │ └─ ml.movie_id:7!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t1.id:4!null\n" + + " │ │ │ └─ mi_idx1.movie_id:13!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t1.id:6!null\n" + - " │ │ └─ mi_idx1.movie_id:21!null\n" + + " │ │ ├─ kt1.id:24!null\n" + + " │ │ └─ t1.kind_id:6!null\n" + " │ └─ Eq\n" + - " │ ├─ t1.id:6!null\n" + - " │ └─ mc1.movie_id:33!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt1.id:9!null\n" + - " │ │ └─ t1.kind_id:8!null\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ ├─ columns: [id title kind_id]\n" + - " │ │ ├─ colSet: (49-60)\n" + - " │ │ └─ tableId: 13\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ kt1.kind:1!null\n" + - " │ │ └─ TUPLE(tv series (longtext))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ ├─ columns: [id kind]\n" + - " │ ├─ colSet: (19,20)\n" + - " │ └─ tableId: 5\n" + + " │ ├─ t1.id:4!null\n" + + " │ └─ mc1.movie_id:18!null\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ ├─ columns: [id title kind_id]\n" + + " │ ├─ colSet: (49-60)\n" + + " │ └─ tableId: 13\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi_idx1.movie_id:21!null\n" + - " │ │ └─ mc1.movie_id:33!null\n" + - " │ └─ Eq\n" + - " │ ├─ ml.movie_id:11!null\n" + - " │ └─ mc1.movie_id:33!null\n" + - " ├─ InnerJoin\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:11!null\n" + - " │ │ │ └─ mi_idx1.movie_id:21!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ lt.id:20!null\n" + + " │ │ │ │ │ └─ ml.link_type_id:9!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:7!null\n" + + " │ │ │ │ └─ mi_idx1.movie_id:13!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:7!null\n" + + " │ │ │ └─ mc1.movie_id:18!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ ml.linked_movie_id:12!null\n" + - " │ │ └─ mi_idx2.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ lt.id:14!null\n" + - " │ │ │ └─ ml.link_type_id:13!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:19!null\n" + - " │ │ │ └─ mi_idx2.info_type_id:17!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx2.info:2!null\n" + - " │ │ │ │ └─ 3.0 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:24!null\n" + - " │ │ │ └─ mi_idx1.info_type_id:22!null\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ ├─ colSet: (35-39)\n" + - " │ │ │ └─ tableId: 10\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ ├─ columns: [id info]\n" + - " │ │ ├─ colSet: (15,16)\n" + - " │ │ └─ tableId: 3\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn2.id:28!null\n" + - " │ │ │ └─ mc2.company_id:27!null\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ cn1.country_code:2\n" + - " │ │ └─ [nl] (longtext)\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ ├─ columns: [id name country_code]\n" + - " │ ├─ colSet: (1-7)\n" + - " │ └─ tableId: 1\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " ├─ columns: [movie_id company_id]\n" + - " ├─ colSet: (25-29)\n" + - " └─ tableId: 8\n" + + " │ │ ├─ ml.linked_movie_id:8!null\n" + + " │ │ └─ mi_idx2.movie_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.linked_movie_id:8!null\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.id:26!null\n" + + " │ │ └─ mi_idx2.info_type_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi_idx2.movie_id:10!null\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx2.info:2!null\n" + + " │ │ └─ 3.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.id:28!null\n" + + " │ │ └─ mi_idx1.info_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi_idx1.movie_id:13!null\n" + + " │ └─ mc1.movie_id:18!null\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ ├─ columns: [movie_id info_type_id info]\n" + + " │ ├─ colSet: (35-39)\n" + + " │ └─ tableId: 10\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cn2.id:30!null\n" + + " │ └─ mc2.company_id:17!null\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cn1.id:32!null\n" + + " │ └─ mc1.company_id:19!null\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ ├─ columns: [movie_id company_id]\n" + + " │ ├─ colSet: (25-29)\n" + + " │ └─ tableId: 8\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt2.kind:1!null\n" + + " │ │ └─ TUPLE(tv series (longtext))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt1.kind:1!null\n" + + " │ │ └─ TUPLE(tv series (longtext))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (19,20)\n" + + " │ └─ tableId: 5\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (15,16)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ cn1.country_code:2\n" + + " │ └─ [nl] (longtext)\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " ├─ columns: [id name country_code]\n" + + " ├─ colSet: (1-7)\n" + + " └─ tableId: 1\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn1.name) as first_company, min(cn2.name) as second_company, min(mi_idx1.info) as first_rating, min(mi_idx2.info) as second_rating, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -28373,100 +27190,97 @@ WHERE cn1.country_code = '[nl]' " ├─ SelectedExprs(MIN(cn1.name), MIN(cn2.name), MIN(mi_idx1.info), MIN(mi_idx2.info), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (t2.id = mc2.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt2.id = t2.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t2.production_year = 2007)\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt2.kind HASH IN ('tv series'))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (t1.id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt1.id = t1.kind_id)\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt1.kind HASH IN ('tv series'))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ ((mi_idx1.movie_id = mc1.movie_id) AND (ml.movie_id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((ml.movie_id = mi_idx1.movie_id) AND (ml.linked_movie_id = mi_idx2.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx2.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx2.info < '3.0')\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi_idx1.info_type_id)\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'rating')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn2.id = mc2.company_id)\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ (cn1.country_code = '[nl]')\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ └─ columns: [id name country_code]\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " └─ columns: [movie_id company_id]\n" + + " ├─ ((((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (kt2.id = t2.kind_id)) AND (t2.id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t2.production_year = 2007)\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (kt1.id = t1.kind_id)) AND (t1.id = mc1.movie_id))\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mi_idx1.movie_id)) AND (ml.movie_id = mc1.movie_id)) AND (ml.linked_movie_id = mi_idx2.movie_id)) AND (ml.linked_movie_id = mc2.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi_idx2.info_type_id) AND (mi_idx2.movie_id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx2.info < '3.0')\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it1.id = mi_idx1.info_type_id) AND (mi_idx1.movie_id = mc1.movie_id))\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (cn2.id = mc2.company_id)\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn1.id = mc1.company_id)\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt2.kind HASH IN ('tv series'))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt1.kind HASH IN ('tv series'))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'rating')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (cn1.country_code = '[nl]')\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn1.name) as first_company, min(cn2.name) as second_company, min(mi_idx1.info) as first_rating, min(mi_idx2.info) as second_rating, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -28474,100 +27288,97 @@ WHERE cn1.country_code = '[nl]' " ├─ SelectedExprs(MIN(cn1.name), MIN(cn2.name), MIN(mi_idx1.info), MIN(mi_idx2.info), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (t2.id = mc2.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt2.id = t2.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t2.production_year = 2007)\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt2.kind HASH IN ('tv series'))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (t1.id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt1.id = t1.kind_id)\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt1.kind HASH IN ('tv series'))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ ((mi_idx1.movie_id = mc1.movie_id) AND (ml.movie_id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((ml.movie_id = mi_idx1.movie_id) AND (ml.linked_movie_id = mi_idx2.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ lt.link LIKE '%follow%'\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx2.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx2.info < '3.0')\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi_idx1.info_type_id)\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'rating')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn2.id = mc2.company_id)\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ (cn1.country_code = '[nl]')\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ └─ columns: [id name country_code]\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " └─ columns: [movie_id company_id]\n" + + " ├─ ((((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (kt2.id = t2.kind_id)) AND (t2.id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t2.production_year = 2007)\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (kt1.id = t1.kind_id)) AND (t1.id = mc1.movie_id))\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mi_idx1.movie_id)) AND (ml.movie_id = mc1.movie_id)) AND (ml.linked_movie_id = mi_idx2.movie_id)) AND (ml.linked_movie_id = mc2.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi_idx2.info_type_id) AND (mi_idx2.movie_id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx2.info < '3.0')\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it1.id = mi_idx1.info_type_id) AND (mi_idx1.movie_id = mc1.movie_id))\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (cn2.id = mc2.company_id)\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn1.id = mc1.company_id)\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ lt.link LIKE '%follow%'\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt2.kind HASH IN ('tv series'))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt1.kind HASH IN ('tv series'))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'rating')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (cn1.country_code = '[nl]')\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -28628,188 +27439,203 @@ WHERE cn1.country_code != '[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(cn1.name):0!null->first_company:0, min(cn2.name):1!null->second_company:0, min(mi_idx1.info):2!null->first_rating:0, min(mi_idx2.info):3!null->second_rating:0, min(t1.title):4!null->first_movie:0, min(t2.title):5!null->second_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(cn1.name:31!null), MIN(cn2.name:29!null), MIN(mi_idx1.info:23!null), MIN(mi_idx2.info:18!null), MIN(t1.title:7!null), MIN(t2.title:1!null)\n" + + " ├─ select: MIN(cn1.name:33!null), MIN(cn2.name:31!null), MIN(mi_idx1.info:15!null), MIN(mi_idx2.info:12!null), MIN(t1.title:5!null), MIN(t2.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t2.id:0!null\n" + - " │ │ │ └─ ml.linked_movie_id:12!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ t2.id:0!null\n" + + " │ │ │ │ └─ ml.linked_movie_id:8!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t2.id:0!null\n" + + " │ │ │ └─ mi_idx2.movie_id:10!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t2.id:0!null\n" + - " │ │ └─ mi_idx2.movie_id:16!null\n" + + " │ │ ├─ kt2.id:22!null\n" + + " │ │ └─ t2.kind_id:2!null\n" + " │ └─ Eq\n" + " │ ├─ t2.id:0!null\n" + - " │ └─ mc2.movie_id:26!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt2.id:4!null\n" + - " │ │ └─ t2.kind_id:2!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ ├─ t2.production_year:3\n" + - " │ │ │ │ └─ 2000 (smallint)\n" + - " │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ ├─ t2.production_year:3\n" + - " │ │ │ └─ 2010 (smallint)\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ kt2.kind:1!null\n" + - " │ │ └─ TUPLE(tv series (longtext), episode (longtext))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ t2.production_year:3\n" + + " │ │ │ └─ 2000 (smallint)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ t2.production_year:3\n" + + " │ │ └─ 2010 (smallint)\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ t1.id:6!null\n" + - " │ │ │ └─ ml.movie_id:11!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ t1.id:4!null\n" + + " │ │ │ │ └─ ml.movie_id:7!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ t1.id:4!null\n" + + " │ │ │ └─ mi_idx1.movie_id:13!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ t1.id:6!null\n" + - " │ │ └─ mi_idx1.movie_id:21!null\n" + + " │ │ ├─ kt1.id:24!null\n" + + " │ │ └─ t1.kind_id:6!null\n" + " │ └─ Eq\n" + - " │ ├─ t1.id:6!null\n" + - " │ └─ mc1.movie_id:33!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ kt1.id:9!null\n" + - " │ │ └─ t1.kind_id:8!null\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ ├─ columns: [id title kind_id]\n" + - " │ │ ├─ colSet: (49-60)\n" + - " │ │ └─ tableId: 13\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ kt1.kind:1!null\n" + - " │ │ └─ TUPLE(tv series (longtext), episode (longtext))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ ├─ columns: [id kind]\n" + - " │ ├─ colSet: (19,20)\n" + - " │ └─ tableId: 5\n" + + " │ ├─ t1.id:4!null\n" + + " │ └─ mc1.movie_id:18!null\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ ├─ columns: [id title kind_id]\n" + + " │ ├─ colSet: (49-60)\n" + + " │ └─ tableId: 13\n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mi_idx1.movie_id:21!null\n" + - " │ │ └─ mc1.movie_id:33!null\n" + - " │ └─ Eq\n" + - " │ ├─ ml.movie_id:11!null\n" + - " │ └─ mc1.movie_id:33!null\n" + - " ├─ InnerJoin\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ml.movie_id:11!null\n" + - " │ │ │ └─ mi_idx1.movie_id:21!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ AND\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ lt.id:20!null\n" + + " │ │ │ │ │ └─ ml.link_type_id:9!null\n" + + " │ │ │ │ └─ Eq\n" + + " │ │ │ │ ├─ ml.movie_id:7!null\n" + + " │ │ │ │ └─ mi_idx1.movie_id:13!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ ml.movie_id:7!null\n" + + " │ │ │ └─ mc1.movie_id:18!null\n" + " │ │ └─ Eq\n" + - " │ │ ├─ ml.linked_movie_id:12!null\n" + - " │ │ └─ mi_idx2.movie_id:16!null\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ lt.id:14!null\n" + - " │ │ │ └─ ml.link_type_id:13!null\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ lt.link:1!null\n" + - " │ │ │ └─ TUPLE(sequel (longtext), follows (longtext), followed by (longtext))\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.id:19!null\n" + - " │ │ │ └─ mi_idx2.info_type_id:17!null\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ LessThan\n" + - " │ │ │ │ ├─ mi_idx2.info:2!null\n" + - " │ │ │ │ └─ 3.5 (longtext)\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it2.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.id:24!null\n" + - " │ │ │ └─ mi_idx1.info_type_id:22!null\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ ├─ columns: [movie_id info_type_id info]\n" + - " │ │ │ ├─ colSet: (35-39)\n" + - " │ │ │ └─ tableId: 10\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it1.info:1!null\n" + - " │ │ │ └─ rating (longtext)\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ ├─ columns: [id info]\n" + - " │ │ ├─ colSet: (15,16)\n" + - " │ │ └─ tableId: 3\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ cn2.id:28!null\n" + - " │ │ │ └─ mc2.company_id:27!null\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ NOT\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ cn1.country_code:2\n" + - " │ │ └─ [us] (longtext)\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ ├─ columns: [id name country_code]\n" + - " │ ├─ colSet: (1-7)\n" + - " │ └─ tableId: 1\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " ├─ columns: [movie_id company_id]\n" + - " ├─ colSet: (25-29)\n" + - " └─ tableId: 8\n" + + " │ │ ├─ ml.linked_movie_id:8!null\n" + + " │ │ └─ mi_idx2.movie_id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ml.linked_movie_id:8!null\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.id:26!null\n" + + " │ │ └─ mi_idx2.info_type_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi_idx2.movie_id:10!null\n" + + " │ └─ mc2.movie_id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ LessThan\n" + + " │ │ ├─ mi_idx2.info:2!null\n" + + " │ │ └─ 3.5 (longtext)\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.id:28!null\n" + + " │ │ └─ mi_idx1.info_type_id:14!null\n" + + " │ └─ Eq\n" + + " │ ├─ mi_idx1.movie_id:13!null\n" + + " │ └─ mc1.movie_id:18!null\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ ├─ columns: [movie_id info_type_id info]\n" + + " │ ├─ colSet: (35-39)\n" + + " │ └─ tableId: 10\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cn2.id:30!null\n" + + " │ └─ mc2.company_id:17!null\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ Eq\n" + + " │ ├─ cn1.id:32!null\n" + + " │ └─ mc1.company_id:19!null\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ ├─ columns: [movie_id company_id]\n" + + " │ ├─ colSet: (25-29)\n" + + " │ └─ tableId: 8\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ lt.link:1!null\n" + + " │ │ └─ TUPLE(sequel (longtext), follows (longtext), followed by (longtext))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt2.kind:1!null\n" + + " │ │ └─ TUPLE(tv series (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ kt1.kind:1!null\n" + + " │ │ └─ TUPLE(tv series (longtext), episode (longtext))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ ├─ columns: [id kind]\n" + + " │ ├─ colSet: (19,20)\n" + + " │ └─ tableId: 5\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it2.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it1.info:1!null\n" + + " │ │ └─ rating (longtext)\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ ├─ columns: [id info]\n" + + " │ ├─ colSet: (15,16)\n" + + " │ └─ tableId: 3\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ NOT\n" + + " │ └─ Eq\n" + + " │ ├─ cn1.country_code:2\n" + + " │ └─ [us] (longtext)\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " ├─ columns: [id name country_code]\n" + + " ├─ colSet: (1-7)\n" + + " └─ tableId: 1\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(cn1.name) as first_company, min(cn2.name) as second_company, min(mi_idx1.info) as first_rating, min(mi_idx2.info) as second_rating, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -28817,100 +27643,97 @@ WHERE cn1.country_code != '[us]' " ├─ SelectedExprs(MIN(cn1.name), MIN(cn2.name), MIN(mi_idx1.info), MIN(mi_idx2.info), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (t2.id = mc2.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt2.id = t2.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t2.production_year >= 2000) AND (t2.production_year <= 2010))\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt2.kind HASH IN ('tv series', 'episode'))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (t1.id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt1.id = t1.kind_id)\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt1.kind HASH IN ('tv series', 'episode'))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ ((mi_idx1.movie_id = mc1.movie_id) AND (ml.movie_id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((ml.movie_id = mi_idx1.movie_id) AND (ml.linked_movie_id = mi_idx2.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (lt.link HASH IN ('sequel', 'follows', 'followed by'))\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx2.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx2.info < '3.5')\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi_idx1.info_type_id)\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'rating')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn2.id = mc2.company_id)\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ (NOT((cn1.country_code = '[us]')))\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ └─ columns: [id name country_code]\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " └─ columns: [movie_id company_id]\n" + + " ├─ ((((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (kt2.id = t2.kind_id)) AND (t2.id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t2.production_year >= 2000) AND (t2.production_year <= 2010))\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (kt1.id = t1.kind_id)) AND (t1.id = mc1.movie_id))\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mi_idx1.movie_id)) AND (ml.movie_id = mc1.movie_id)) AND (ml.linked_movie_id = mi_idx2.movie_id)) AND (ml.linked_movie_id = mc2.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi_idx2.info_type_id) AND (mi_idx2.movie_id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx2.info < '3.5')\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it1.id = mi_idx1.info_type_id) AND (mi_idx1.movie_id = mc1.movie_id))\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (cn2.id = mc2.company_id)\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn1.id = mc1.company_id)\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (lt.link HASH IN ('sequel', 'follows', 'followed by'))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt2.kind HASH IN ('tv series', 'episode'))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt1.kind HASH IN ('tv series', 'episode'))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'rating')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn1.country_code = '[us]')))\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(cn1.name) as first_company, min(cn2.name) as second_company, min(mi_idx1.info) as first_rating, min(mi_idx2.info) as second_rating, min(t1.title) as first_movie, min(t2.title) as second_movie]\n" + @@ -28918,100 +27741,97 @@ WHERE cn1.country_code != '[us]' " ├─ SelectedExprs(MIN(cn1.name), MIN(cn2.name), MIN(mi_idx1.info), MIN(mi_idx2.info), MIN(t1.title), MIN(t2.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (t2.id = mc2.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt2.id = t2.kind_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((t2.production_year >= 2000) AND (t2.production_year <= 2010))\n" + - " │ │ └─ TableAlias(t2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt2.kind HASH IN ('tv series', 'episode'))\n" + - " │ └─ TableAlias(kt2)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ (((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (t1.id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (kt1.id = t1.kind_id)\n" + - " │ ├─ TableAlias(t1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title kind_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (kt1.kind HASH IN ('tv series', 'episode'))\n" + - " │ └─ TableAlias(kt1)\n" + - " │ └─ Table\n" + - " │ ├─ name: kind_type\n" + - " │ └─ columns: [id kind]\n" + - " └─ InnerJoin\n" + - " ├─ ((mi_idx1.movie_id = mc1.movie_id) AND (ml.movie_id = mc1.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ ((ml.movie_id = mi_idx1.movie_id) AND (ml.linked_movie_id = mi_idx2.movie_id))\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (lt.id = ml.link_type_id)\n" + - " │ │ ├─ TableAlias(ml)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_link\n" + - " │ │ │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (lt.link HASH IN ('sequel', 'follows', 'followed by'))\n" + - " │ │ └─ TableAlias(lt)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: link_type\n" + - " │ │ └─ columns: [id link]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it2.id = mi_idx2.info_type_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (mi_idx2.info < '3.5')\n" + - " │ │ │ └─ TableAlias(mi_idx2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it2.info = 'rating')\n" + - " │ │ └─ TableAlias(it2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (it1.id = mi_idx1.info_type_id)\n" + - " │ │ ├─ TableAlias(mi_idx1)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_info_idx\n" + - " │ │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ (it1.info = 'rating')\n" + - " │ │ └─ TableAlias(it1)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: info_type\n" + - " │ │ └─ columns: [id info]\n" + - " │ └─ CrossJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (cn2.id = mc2.company_id)\n" + - " │ │ ├─ TableAlias(mc2)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: movie_companies\n" + - " │ │ │ └─ columns: [movie_id company_id]\n" + - " │ │ └─ TableAlias(cn2)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: company_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ Filter\n" + - " │ ├─ (NOT((cn1.country_code = '[us]')))\n" + - " │ └─ TableAlias(cn1)\n" + - " │ └─ Table\n" + - " │ ├─ name: company_name\n" + - " │ └─ columns: [id name country_code]\n" + - " └─ TableAlias(mc1)\n" + - " └─ Table\n" + - " ├─ name: movie_companies\n" + - " └─ columns: [movie_id company_id]\n" + + " ├─ ((((t2.id = ml.linked_movie_id) AND (t2.id = mi_idx2.movie_id)) AND (kt2.id = t2.kind_id)) AND (t2.id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((t2.production_year >= 2000) AND (t2.production_year <= 2010))\n" + + " │ └─ TableAlias(t2)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((((t1.id = ml.movie_id) AND (t1.id = mi_idx1.movie_id)) AND (kt1.id = t1.kind_id)) AND (t1.id = mc1.movie_id))\n" + + " ├─ TableAlias(t1)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title kind_id]\n" + + " └─ InnerJoin\n" + + " ├─ (((((lt.id = ml.link_type_id) AND (ml.movie_id = mi_idx1.movie_id)) AND (ml.movie_id = mc1.movie_id)) AND (ml.linked_movie_id = mi_idx2.movie_id)) AND (ml.linked_movie_id = mc2.movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [movie_id linked_movie_id link_type_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((it2.id = mi_idx2.info_type_id) AND (mi_idx2.movie_id = mc2.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx2.info < '3.5')\n" + + " │ └─ TableAlias(mi_idx2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ ((it1.id = mi_idx1.info_type_id) AND (mi_idx1.movie_id = mc1.movie_id))\n" + + " ├─ TableAlias(mi_idx1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (cn2.id = mc2.company_id)\n" + + " ├─ TableAlias(mc2)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ InnerJoin\n" + + " ├─ (cn1.id = mc1.company_id)\n" + + " ├─ TableAlias(mc1)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (lt.link HASH IN ('sequel', 'follows', 'followed by'))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt2.kind HASH IN ('tv series', 'episode'))\n" + + " │ └─ TableAlias(kt2)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (kt1.kind HASH IN ('tv series', 'episode'))\n" + + " │ └─ TableAlias(kt1)\n" + + " │ └─ Table\n" + + " │ ├─ name: kind_type\n" + + " │ └─ columns: [id kind]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it2.info = 'rating')\n" + + " │ └─ TableAlias(it2)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it1.info = 'rating')\n" + + " │ └─ TableAlias(it1)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(cn2)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id name]\n" + + " └─ Filter\n" + + " ├─ (NOT((cn1.country_code = '[us]')))\n" + + " └─ TableAlias(cn1)\n" + + " └─ Table\n" + + " ├─ name: company_name\n" + + " └─ columns: [id name country_code]\n" + "", }, { @@ -29045,49 +27865,50 @@ WHERE k.keyword LIKE '%sequel%' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mk.movie_id:5!null\n" + - " │ │ └─ mi.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:5!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2005 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ mi.info:1!null\n" + - " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:7!null\n" + - " │ └─ mk.keyword_id:6!null\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ mi.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:7!null\n" + + " │ └─ mk.keyword_id:4!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -29095,33 +27916,32 @@ WHERE k.keyword LIKE '%sequel%' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((mk.movie_id = mi.movie_id) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((mk.movie_id = mi.movie_id) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -29129,33 +27949,32 @@ WHERE k.keyword LIKE '%sequel%' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((mk.movie_id = mi.movie_id) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((mk.movie_id = mi.movie_id) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", }, { @@ -29180,51 +27999,52 @@ WHERE k.keyword LIKE '%sequel%' " ├─ select: MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ mk.movie_id:5!null\n" + - " │ │ └─ mi.movie_id:3!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:5!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ mi.info:1!null\n" + - " │ │ └─ TUPLE(Bulgaria (longtext))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " │ │ └─ mi.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:7!null\n" + - " │ └─ mk.keyword_id:6!null\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ mi.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:7!null\n" + + " │ └─ mk.keyword_id:4!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Bulgaria (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -29232,33 +28052,32 @@ WHERE k.keyword LIKE '%sequel%' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((mk.movie_id = mi.movie_id) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Bulgaria'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((mk.movie_id = mi.movie_id) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Bulgaria'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -29266,33 +28085,32 @@ WHERE k.keyword LIKE '%sequel%' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((mk.movie_id = mi.movie_id) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Bulgaria'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((mk.movie_id = mi.movie_id) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Bulgaria'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", }, { @@ -29328,49 +28146,50 @@ WHERE k.keyword LIKE '%sequel%' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ mk.movie_id:5!null\n" + - " │ │ └─ mi.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:5!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 1990 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ mi.info:1!null\n" + - " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1990 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ k.id:7!null\n" + - " │ └─ mk.keyword_id:6!null\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ mi.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:7!null\n" + + " │ └─ mk.keyword_id:4!null\n" + " ├─ TableAlias(mk)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:1!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -29378,33 +28197,32 @@ WHERE k.keyword LIKE '%sequel%' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((mk.movie_id = mi.movie_id) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 1990)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((mk.movie_id = mi.movie_id) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as movie_title]\n" + @@ -29412,33 +28230,32 @@ WHERE k.keyword LIKE '%sequel%' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((mk.movie_id = mi.movie_id) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 1990)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ └─ TableAlias(mi)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info\n" + - " │ └─ columns: [movie_id info]\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + - " ├─ (k.id = mk.keyword_id)\n" + + " ├─ ((mk.movie_id = mi.movie_id) AND (k.id = mk.keyword_id))\n" + " ├─ TableAlias(mk)\n" + " │ └─ Table\n" + " │ ├─ name: movie_keyword\n" + " │ └─ columns: [movie_id keyword_id]\n" + - " └─ Filter\n" + - " ├─ k.keyword LIKE '%sequel%'\n" + - " └─ TableAlias(k)\n" + - " └─ Table\n" + - " ├─ name: keyword\n" + - " └─ columns: [id keyword]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info]\n" + + " └─ Filter\n" + + " ├─ k.keyword LIKE '%sequel%'\n" + + " └─ TableAlias(k)\n" + + " └─ Table\n" + + " ├─ name: keyword\n" + + " └─ columns: [id keyword]\n" + "", }, { @@ -29464,68 +28281,68 @@ WHERE it.info ='rating' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi_idx.info):0!null->rating:0, min(t.title):1!null->movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi_idx.info:5!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mi_idx.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it.id:10!null\n" + - " │ │ │ └─ mi_idx.info_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:6!null\n" + - " │ │ └─ mi_idx.movie_id:3!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi_idx.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2005 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ GreaterThan\n" + - " │ │ ├─ mi_idx.info:2!null\n" + - " │ │ └─ 5.0 (longtext)\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ k.id:8!null\n" + - " │ │ └─ mk.keyword_id:7!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:8!null\n" + + " │ └─ mk.keyword_id:4!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ it.info:1!null\n" + - " │ └─ rating (longtext)\n" + - " └─ TableAlias(it)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " │ ├─ it.id:10!null\n" + + " │ └─ mi_idx.info_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 5.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ it.info:1!null\n" + + " │ └─ rating (longtext)\n" + + " └─ TableAlias(it)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as movie_title]\n" + @@ -29533,40 +28350,40 @@ WHERE it.info ='rating' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((it.id = mi_idx.info_type_id) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi_idx.info > '5.0')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (it.info = 'rating')\n" + - " └─ TableAlias(it)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ ((t.id = mi_idx.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.movie_id = mi_idx.movie_id) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (it.id = mi_idx.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '5.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (it.info = 'rating')\n" + + " └─ TableAlias(it)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as movie_title]\n" + @@ -29574,40 +28391,40 @@ WHERE it.info ='rating' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((it.id = mi_idx.info_type_id) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi_idx.info > '5.0')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (it.info = 'rating')\n" + - " └─ TableAlias(it)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ ((t.id = mi_idx.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.movie_id = mi_idx.movie_id) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (it.id = mi_idx.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '5.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (it.info = 'rating')\n" + + " └─ TableAlias(it)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", }, { @@ -29633,68 +28450,68 @@ WHERE it.info ='rating' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi_idx.info):0!null->rating:0, min(t.title):1!null->movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi_idx.info:5!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mi_idx.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it.id:10!null\n" + - " │ │ │ └─ mi_idx.info_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:6!null\n" + - " │ │ └─ mi_idx.movie_id:3!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi_idx.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ GreaterThan\n" + - " │ │ ├─ mi_idx.info:2!null\n" + - " │ │ └─ 9.0 (longtext)\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ k.id:8!null\n" + - " │ │ └─ mk.keyword_id:7!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:8!null\n" + + " │ └─ mk.keyword_id:4!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ it.info:1!null\n" + - " │ └─ rating (longtext)\n" + - " └─ TableAlias(it)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " │ ├─ it.id:10!null\n" + + " │ └─ mi_idx.info_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 9.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ it.info:1!null\n" + + " │ └─ rating (longtext)\n" + + " └─ TableAlias(it)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as movie_title]\n" + @@ -29702,40 +28519,40 @@ WHERE it.info ='rating' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((it.id = mi_idx.info_type_id) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi_idx.info > '9.0')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (it.info = 'rating')\n" + - " └─ TableAlias(it)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ ((t.id = mi_idx.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.movie_id = mi_idx.movie_id) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (it.id = mi_idx.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '9.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (it.info = 'rating')\n" + + " └─ TableAlias(it)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as movie_title]\n" + @@ -29743,40 +28560,40 @@ WHERE it.info ='rating' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((it.id = mi_idx.info_type_id) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi_idx.info > '9.0')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (it.info = 'rating')\n" + - " └─ TableAlias(it)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ ((t.id = mi_idx.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.movie_id = mi_idx.movie_id) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (it.id = mi_idx.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '9.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (it.info = 'rating')\n" + + " └─ TableAlias(it)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", }, { @@ -29802,68 +28619,68 @@ WHERE it.info ='rating' ExpectedPlan: "Project\n" + " ├─ columns: [min(mi_idx.info):0!null->rating:0, min(t.title):1!null->movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(mi_idx.info:5!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(mi_idx.info:7!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ it.id:10!null\n" + - " │ │ │ └─ mi_idx.info_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mk.movie_id:6!null\n" + - " │ │ └─ mi_idx.movie_id:3!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mk.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mi_idx.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 1990 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ GreaterThan\n" + - " │ │ ├─ mi_idx.info:2!null\n" + - " │ │ └─ 2.0 (longtext)\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mk.movie_id:3!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1990 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ k.id:8!null\n" + - " │ │ └─ mk.keyword_id:7!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + + " │ │ ├─ mk.movie_id:3!null\n" + + " │ │ └─ mi_idx.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ k.id:8!null\n" + + " │ └─ mk.keyword_id:4!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ it.info:1!null\n" + - " │ └─ rating (longtext)\n" + - " └─ TableAlias(it)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " │ ├─ it.id:10!null\n" + + " │ └─ mi_idx.info_type_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ mi_idx.info:2!null\n" + + " │ │ └─ 2.0 (longtext)\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ it.info:1!null\n" + + " │ └─ rating (longtext)\n" + + " └─ TableAlias(it)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as movie_title]\n" + @@ -29871,40 +28688,40 @@ WHERE it.info ='rating' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((it.id = mi_idx.info_type_id) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 1990)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi_idx.info > '2.0')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (it.info = 'rating')\n" + - " └─ TableAlias(it)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ ((t.id = mi_idx.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.movie_id = mi_idx.movie_id) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (it.id = mi_idx.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '2.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (it.info = 'rating')\n" + + " └─ TableAlias(it)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(mi_idx.info) as rating, min(t.title) as movie_title]\n" + @@ -29912,40 +28729,40 @@ WHERE it.info ='rating' " ├─ SelectedExprs(MIN(mi_idx.info), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((it.id = mi_idx.info_type_id) AND (mk.movie_id = mi_idx.movie_id)) AND (t.id = mk.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mi_idx.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 1990)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mi_idx.info > '2.0')\n" + - " │ └─ TableAlias(mi_idx)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_info_idx\n" + - " │ └─ columns: [movie_id info_type_id info]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ k.keyword LIKE '%sequel%'\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + - " └─ Filter\n" + - " ├─ (it.info = 'rating')\n" + - " └─ TableAlias(it)\n" + - " └─ Table\n" + - " ├─ name: info_type\n" + - " └─ columns: [id info]\n" + + " ├─ ((t.id = mi_idx.movie_id) AND (t.id = mk.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mk.movie_id = mi_idx.movie_id) AND (k.id = mk.keyword_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ InnerJoin\n" + + " ├─ (it.id = mi_idx.info_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mi_idx.info > '2.0')\n" + + " │ └─ TableAlias(mi_idx)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_info_idx\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ k.keyword LIKE '%sequel%'\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ Filter\n" + + " ├─ (it.info = 'rating')\n" + + " └─ TableAlias(it)\n" + + " └─ Table\n" + + " ├─ name: info_type\n" + + " └─ columns: [id info]\n" + "", }, { @@ -29982,66 +28799,66 @@ WHERE ct.kind = 'production companies' " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:10!null\n" + - " │ │ │ └─ mc.company_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:3!null\n" + - " │ │ └─ mi.movie_id:6!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mi.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2005 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ mc.note LIKE '%(theatrical)%'\n" + - " │ │ └─ mc.note LIKE '%(France)%'\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mi.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2005 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ it.id:9!null\n" + - " │ │ └─ mi.info_type_id:7!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " │ │ ├─ mc.movie_id:6!null\n" + + " │ │ └─ mi.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ it.id:9!null\n" + + " │ └─ mi.info_type_id:4!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ct.kind:1!null\n" + - " │ └─ production companies (longtext)\n" + - " └─ TableAlias(ct)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ ct.id:10!null\n" + + " │ └─ mc.company_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mc.note LIKE '%(theatrical)%'\n" + + " │ │ └─ mc.note LIKE '%(France)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ ct.kind:1!null\n" + + " │ └─ production companies (longtext)\n" + + " └─ TableAlias(ct)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as typical_european_movie]\n" + @@ -30049,40 +28866,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi.movie_id)) AND (t.id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mc.note LIKE '%(theatrical)%' AND mc.note LIKE '%(France)%')\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(theatrical)%' AND mc.note LIKE '%(France)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as typical_european_movie]\n" + @@ -30090,40 +28907,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi.movie_id)) AND (t.id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2005)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ (mc.note LIKE '%(theatrical)%' AND mc.note LIKE '%(France)%')\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2005)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German'))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(theatrical)%' AND mc.note LIKE '%(France)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", }, { @@ -30150,73 +28967,73 @@ WHERE ct.kind = 'production companies' `, ExpectedPlan: "Project\n" + " ├─ columns: [min(t.title):0!null->american_vhs_movie:0]\n" + - " └─ GroupBy\n" + - " ├─ select: MIN(t.title:1!null)\n" + - " ├─ group: \n" + - " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:10!null\n" + - " │ │ │ └─ mc.company_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:3!null\n" + - " │ │ └─ mi.movie_id:6!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mi.movie_id:6!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ mc.note LIKE '%(VHS)%'\n" + - " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ └─ mc.note LIKE '%(1994)%'\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " └─ GroupBy\n" + + " ├─ select: MIN(t.title:1!null)\n" + + " ├─ group: \n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mi.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ it.id:9!null\n" + - " │ │ └─ mi.info_type_id:7!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(USA (longtext), America (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " │ │ ├─ mc.movie_id:6!null\n" + + " │ │ └─ mi.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ it.id:9!null\n" + + " │ └─ mi.info_type_id:4!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(USA (longtext), America (longtext))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ct.kind:1!null\n" + - " │ └─ production companies (longtext)\n" + - " └─ TableAlias(ct)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ ct.id:10!null\n" + + " │ └─ mc.company_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ mc.note LIKE '%(VHS)%'\n" + + " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(1994)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ ct.kind:1!null\n" + + " │ └─ production companies (longtext)\n" + + " └─ TableAlias(ct)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as american_vhs_movie]\n" + @@ -30224,40 +29041,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi.movie_id)) AND (t.id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ ((mc.note LIKE '%(VHS)%' AND mc.note LIKE '%(USA)%') AND mc.note LIKE '%(1994)%')\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('USA', 'America'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('USA', 'America'))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((mc.note LIKE '%(VHS)%' AND mc.note LIKE '%(USA)%') AND mc.note LIKE '%(1994)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as american_vhs_movie]\n" + @@ -30265,40 +29082,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi.movie_id)) AND (t.id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ ((mc.note LIKE '%(VHS)%' AND mc.note LIKE '%(USA)%') AND mc.note LIKE '%(1994)%')\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('USA', 'America'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('USA', 'America'))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((mc.note LIKE '%(VHS)%' AND mc.note LIKE '%(USA)%') AND mc.note LIKE '%(1994)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", }, { @@ -30337,67 +29154,67 @@ WHERE ct.kind = 'production companies' " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ct.id:10!null\n" + - " │ │ │ └─ mc.company_type_id:4!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ mc.movie_id:3!null\n" + - " │ │ └─ mi.movie_id:6!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ mi.movie_id:6!null\n" + - " ├─ InnerJoin\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mc.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 1990 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ NOT\n" + - " │ │ │ └─ mc.note LIKE '%(TV)%'\n" + - " │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + + " │ │ └─ mi.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ mc.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 1990 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ it.id:9!null\n" + - " │ │ └─ mi.info_type_id:7!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ HashIn\n" + - " │ │ │ ├─ mi.info:2!null\n" + - " │ │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " │ │ ├─ mc.movie_id:6!null\n" + + " │ │ └─ mi.movie_id:3!null\n" + + " │ └─ Eq\n" + + " │ ├─ it.id:9!null\n" + + " │ └─ mi.info_type_id:4!null\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ mi.info:2!null\n" + + " │ │ └─ TUPLE(Sweden (longtext), Norway (longtext), Germany (longtext), Denmark (longtext), Swedish (longtext), Denish (longtext), Norwegian (longtext), German (longtext), USA (longtext), American (longtext))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ct.kind:1!null\n" + - " │ └─ production companies (longtext)\n" + - " └─ TableAlias(ct)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ ct.id:10!null\n" + + " │ └─ mc.company_type_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(TV)%'\n" + + " │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ Eq\n" + + " │ ├─ ct.kind:1!null\n" + + " │ └─ production companies (longtext)\n" + + " └─ TableAlias(ct)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(t.title) as american_movie]\n" + @@ -30405,40 +29222,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi.movie_id)) AND (t.id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 1990)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ ((NOT(mc.note LIKE '%(TV)%')) AND mc.note LIKE '%(USA)%')\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(TV)%')) AND mc.note LIKE '%(USA)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(t.title) as american_movie]\n" + @@ -30446,40 +29263,40 @@ WHERE ct.kind = 'production companies' " ├─ SelectedExprs(MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ (((ct.id = mc.company_type_id) AND (mc.movie_id = mi.movie_id)) AND (t.id = mi.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 1990)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ Filter\n" + - " │ ├─ ((NOT(mc.note LIKE '%(TV)%')) AND mc.note LIKE '%(USA)%')\n" + - " │ └─ TableAlias(mc)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_companies\n" + - " │ └─ columns: [movie_id company_type_id note]\n" + - " └─ CrossJoin\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = mi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + - " │ │ └─ TableAlias(mi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_info\n" + - " │ │ └─ columns: [movie_id info_type_id info]\n" + - " │ └─ TableAlias(it)\n" + + " ├─ ((t.id = mi.movie_id) AND (t.id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 1990)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + + " └─ InnerJoin\n" + + " ├─ ((mc.movie_id = mi.movie_id) AND (it.id = mi.info_type_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mi.info HASH IN ('Sweden', 'Norway', 'Germany', 'Denmark', 'Swedish', 'Denish', 'Norwegian', 'German', 'USA', 'American'))\n" + + " │ └─ TableAlias(mi)\n" + " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id]\n" + - " └─ Filter\n" + - " ├─ (ct.kind = 'production companies')\n" + - " └─ TableAlias(ct)\n" + - " └─ Table\n" + - " ├─ name: company_type\n" + - " └─ columns: [id kind]\n" + + " │ ├─ name: movie_info\n" + + " │ └─ columns: [movie_id info_type_id info]\n" + + " └─ InnerJoin\n" + + " ├─ (ct.id = mc.company_type_id)\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note LIKE '%(TV)%')) AND mc.note LIKE '%(USA)%')\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_type_id note]\n" + + " └─ CrossJoin\n" + + " ├─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id]\n" + + " └─ Filter\n" + + " ├─ (ct.kind = 'production companies')\n" + + " └─ TableAlias(ct)\n" + + " └─ Table\n" + + " ├─ name: company_type\n" + + " └─ columns: [id kind]\n" + "", }, { @@ -30505,50 +29322,28 @@ WHERE k.keyword = 'marvel-cinematic-universe' ExpectedPlan: "Project\n" + " ├─ columns: [min(k.keyword):0!null->movie_keyword:0, min(n.name):1!null->actor_name:0, min(t.title):2!null->marvel_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(k.keyword:6!null), MIN(n.name:8!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(k.keyword:8!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ ci.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2010 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:5!null\n" + - " │ │ └─ mk.keyword_id:4!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ marvel-cinematic-universe (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2010 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:7!null\n" + + " │ ├─ n.id:3!null\n" + " │ └─ ci.person_id:9!null\n" + " ├─ Filter\n" + " │ ├─ n.name LIKE '%Downey%Robert%'\n" + @@ -30557,11 +29352,34 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.id:7!null\n" + + " │ │ └─ mk.keyword_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:10!null\n" + + " │ └─ mk.movie_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ marvel-cinematic-universe (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as marvel_movie]\n" + @@ -30569,27 +29387,13 @@ WHERE k.keyword = 'marvel-cinematic-universe' " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -30598,10 +29402,23 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as marvel_movie]\n" + @@ -30609,27 +29426,13 @@ WHERE k.keyword = 'marvel-cinematic-universe' " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2010)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2010)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -30638,10 +29441,23 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -30671,53 +29487,31 @@ WHERE k.keyword IN ('superhero', AND n.id = ci.person_id; `, - ExpectedPlan: "Project\n" + - " ├─ columns: [min(k.keyword):0!null->movie_keyword:0, min(n.name):1!null->actor_name:0, min(t.title):2!null->hero_movie:0]\n" + - " └─ GroupBy\n" + - " ├─ select: MIN(k.keyword:6!null), MIN(n.name:8!null), MIN(t.title:1!null)\n" + - " ├─ group: \n" + - " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + - " │ └─ Eq\n" + - " │ ├─ t.id:0!null\n" + - " │ └─ ci.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2014 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:5!null\n" + - " │ │ └─ mk.keyword_id:4!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + ExpectedPlan: "Project\n" + + " ├─ columns: [min(k.keyword):0!null->movie_keyword:0, min(n.name):1!null->actor_name:0, min(t.title):2!null->hero_movie:0]\n" + + " └─ GroupBy\n" + + " ├─ select: MIN(k.keyword:8!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + + " ├─ group: \n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + + " │ └─ Eq\n" + + " │ ├─ t.id:0!null\n" + + " │ └─ ci.movie_id:10!null\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2014 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:7!null\n" + + " │ ├─ n.id:3!null\n" + " │ └─ ci.person_id:9!null\n" + " ├─ Filter\n" + " │ ├─ n.name LIKE '%Downey%Robert%'\n" + @@ -30726,11 +29520,34 @@ WHERE k.keyword IN ('superhero', " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.id:7!null\n" + + " │ │ └─ mk.keyword_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:10!null\n" + + " │ └─ mk.movie_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as hero_movie]\n" + @@ -30738,27 +29555,13 @@ WHERE k.keyword IN ('superhero', " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2014)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2014)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -30767,10 +29570,23 @@ WHERE k.keyword IN ('superhero', " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as hero_movie]\n" + @@ -30778,27 +29594,13 @@ WHERE k.keyword IN ('superhero', " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2014)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2014)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -30807,10 +29609,23 @@ WHERE k.keyword IN ('superhero', " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -30836,50 +29651,28 @@ WHERE k.keyword = 'marvel-cinematic-universe' ExpectedPlan: "Project\n" + " ├─ columns: [min(k.keyword):0!null->movie_keyword:0, min(n.name):1!null->actor_name:0, min(t.title):2!null->marvel_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(k.keyword:6!null), MIN(n.name:8!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(k.keyword:8!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ ci.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2014 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:5!null\n" + - " │ │ └─ mk.keyword_id:4!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ marvel-cinematic-universe (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2014 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:7!null\n" + + " │ ├─ n.id:3!null\n" + " │ └─ ci.person_id:9!null\n" + " ├─ Filter\n" + " │ ├─ n.name LIKE '%Downey%Robert%'\n" + @@ -30888,11 +29681,34 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.id:7!null\n" + + " │ │ └─ mk.keyword_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:10!null\n" + + " │ └─ mk.movie_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ marvel-cinematic-universe (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as marvel_movie]\n" + @@ -30900,27 +29716,13 @@ WHERE k.keyword = 'marvel-cinematic-universe' " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2014)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2014)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -30929,10 +29731,23 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as marvel_movie]\n" + @@ -30940,27 +29755,13 @@ WHERE k.keyword = 'marvel-cinematic-universe' " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2014)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2014)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -30969,10 +29770,23 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -31005,50 +29819,28 @@ WHERE k.keyword IN ('superhero', ExpectedPlan: "Project\n" + " ├─ columns: [min(k.keyword):0!null->movie_keyword:0, min(n.name):1!null->actor_name:0, min(t.title):2!null->hero_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(k.keyword:6!null), MIN(n.name:8!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(k.keyword:8!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ ci.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2000 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:5!null\n" + - " │ │ └─ mk.keyword_id:4!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:7!null\n" + + " │ ├─ n.id:3!null\n" + " │ └─ ci.person_id:9!null\n" + " ├─ Filter\n" + " │ ├─ n.name LIKE '%Downey%Robert%'\n" + @@ -31057,11 +29849,34 @@ WHERE k.keyword IN ('superhero', " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.id:7!null\n" + + " │ │ └─ mk.keyword_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:10!null\n" + + " │ └─ mk.movie_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as hero_movie]\n" + @@ -31069,27 +29884,13 @@ WHERE k.keyword IN ('superhero', " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2000)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -31098,10 +29899,23 @@ WHERE k.keyword IN ('superhero', " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as hero_movie]\n" + @@ -31109,27 +29923,13 @@ WHERE k.keyword IN ('superhero', " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2000)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -31138,10 +29938,23 @@ WHERE k.keyword IN ('superhero', " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -31167,50 +29980,28 @@ WHERE k.keyword = 'marvel-cinematic-universe' ExpectedPlan: "Project\n" + " ├─ columns: [min(k.keyword):0!null->movie_keyword:0, min(n.name):1!null->actor_name:0, min(t.title):2!null->marvel_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(k.keyword:6!null), MIN(n.name:8!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(k.keyword:8!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ ci.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2000 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:5!null\n" + - " │ │ └─ mk.keyword_id:4!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ marvel-cinematic-universe (longtext)\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:7!null\n" + + " │ ├─ n.id:3!null\n" + " │ └─ ci.person_id:9!null\n" + " ├─ Filter\n" + " │ ├─ n.name LIKE '%Downey%Robert%'\n" + @@ -31219,11 +30010,34 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.id:7!null\n" + + " │ │ └─ mk.keyword_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:10!null\n" + + " │ └─ mk.movie_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ marvel-cinematic-universe (longtext)\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as marvel_movie]\n" + @@ -31231,27 +30045,13 @@ WHERE k.keyword = 'marvel-cinematic-universe' " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2000)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -31260,10 +30060,23 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as marvel_movie]\n" + @@ -31271,27 +30084,13 @@ WHERE k.keyword = 'marvel-cinematic-universe' " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2000)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ Filter\n" + @@ -31300,10 +30099,23 @@ WHERE k.keyword = 'marvel-cinematic-universe' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword = 'marvel-cinematic-universe')\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -31335,61 +30147,62 @@ WHERE k.keyword IN ('superhero', ExpectedPlan: "Project\n" + " ├─ columns: [min(k.keyword):0!null->movie_keyword:0, min(n.name):1!null->actor_name:0, min(t.title):2!null->hero_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(k.keyword:6!null), MIN(n.name:8!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(k.keyword:8!null), MIN(n.name:4!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + + " │ │ ├─ t.id:0!null\n" + + " │ │ └─ mk.movie_id:5!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + " │ └─ ci.movie_id:10!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ mk.movie_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ GreaterThan\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 2000 (int)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ k.id:5!null\n" + - " │ │ └─ mk.keyword_id:4!null\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ HashIn\n" + - " │ │ ├─ k.keyword:1!null\n" + - " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ Filter\n" + + " │ ├─ GreaterThan\n" + + " │ │ ├─ t.production_year:2\n" + + " │ │ └─ 2000 (int)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ n.id:7!null\n" + + " │ ├─ n.id:3!null\n" + " │ └─ ci.person_id:9!null\n" + " ├─ TableAlias(n)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ k.id:7!null\n" + + " │ │ └─ mk.keyword_id:6!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:10!null\n" + + " │ └─ mk.movie_id:5!null\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ k.keyword:1!null\n" + + " │ │ └─ TUPLE(superhero (longtext), sequel (longtext), second-part (longtext), marvel-comics (longtext), based-on-comic (longtext), tv-special (longtext), fight (longtext), violence (longtext))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ ProcessTable\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as hero_movie]\n" + @@ -31397,37 +30210,36 @@ WHERE k.keyword IN ('superhero', " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2000)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ TableAlias(n)\n" + " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(k.keyword) as movie_keyword, min(n.name) as actor_name, min(t.title) as hero_movie]\n" + @@ -31435,37 +30247,36 @@ WHERE k.keyword IN ('superhero', " ├─ SelectedExprs(MIN(k.keyword), MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + " └─ InnerJoin\n" + - " ├─ ((ci.movie_id = mk.movie_id) AND (t.id = ci.movie_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (t.id = mk.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (t.production_year > 2000)\n" + - " │ │ └─ TableAlias(t)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: title\n" + - " │ │ └─ columns: [id title production_year]\n" + - " │ └─ InnerJoin\n" + - " │ ├─ (k.id = mk.keyword_id)\n" + - " │ ├─ TableAlias(mk)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_keyword\n" + - " │ │ └─ columns: [movie_id keyword_id]\n" + - " │ └─ Filter\n" + - " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + - " │ └─ TableAlias(k)\n" + - " │ └─ Table\n" + - " │ ├─ name: keyword\n" + - " │ └─ columns: [id keyword]\n" + + " ├─ ((t.id = mk.movie_id) AND (t.id = ci.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (t.production_year > 2000)\n" + + " │ └─ TableAlias(t)\n" + + " │ └─ Table\n" + + " │ ├─ name: title\n" + + " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ (n.id = ci.person_id)\n" + " ├─ TableAlias(n)\n" + " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ TableAlias(ci)\n" + - " └─ Table\n" + - " ├─ name: cast_info\n" + - " └─ columns: [person_id movie_id]\n" + + " └─ InnerJoin\n" + + " ├─ ((k.id = mk.keyword_id) AND (ci.movie_id = mk.movie_id))\n" + + " ├─ TableAlias(mk)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_keyword\n" + + " │ └─ columns: [movie_id keyword_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (k.keyword HASH IN ('superhero', 'sequel', 'second-part', 'marvel-comics', 'based-on-comic', 'tv-special', 'fight', 'violence'))\n" + + " │ └─ TableAlias(k)\n" + + " │ └─ Table\n" + + " │ ├─ name: keyword\n" + + " │ └─ columns: [id keyword]\n" + + " └─ TableAlias(ci)\n" + + " └─ Table\n" + + " ├─ name: cast_info\n" + + " └─ columns: [person_id movie_id]\n" + "", }, { @@ -31505,268 +30316,260 @@ WHERE an.name LIKE '%a%' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->of_person:0, min(t.title):1!null->biography_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:9!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(n.name:6!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ InnerJoin\n" + + " └─ LookupJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ ci.movie_id:13!null\n" + + " │ │ ├─ n.id:5!null\n" + + " │ │ └─ an.person_id:18!null\n" + " │ └─ Eq\n" + - " │ ├─ ml.linked_movie_id:16!null\n" + - " │ └─ t.id:0!null\n" + - " ├─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 1980 (smallint)\n" + - " │ │ └─ LessThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 1995 (smallint)\n" + - " │ └─ TableAlias(t)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: title\n" + - " │ └─ columns: [id title production_year]\n" + - " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:8!null\n" + - " │ │ │ └─ pi.person_id:3!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ pi.person_id:3!null\n" + - " │ │ └─ an.person_id:14!null\n" + - " │ └─ Eq\n" + - " │ ├─ pi.person_id:3!null\n" + - " │ └─ ci.person_id:12!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:6!null\n" + - " │ │ └─ pi.info_type_id:4!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ pi.note:2\n" + - " │ │ │ └─ Volker Boehm (longtext)\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id note]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ mini biography (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ lt.id:18!null\n" + - " │ └─ ml.link_type_id:17!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:13!null\n" + - " │ │ └─ ml.linked_movie_id:16!null\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:8!null\n" + - " │ │ │ └─ an.person_id:14!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ci.person_id:12!null\n" + - " │ │ │ │ └─ n.id:8!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + - " │ │ │ │ │ │ │ └─ A (longtext)\n" + - " │ │ │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + - " │ │ │ │ │ │ └─ F (longtext)\n" + - " │ │ │ │ │ └─ Or\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ n.gender:2\n" + - " │ │ │ │ │ │ └─ m (longtext)\n" + - " │ │ │ │ │ └─ AND\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ n.gender:2\n" + - " │ │ │ │ │ │ └─ f (longtext)\n" + - " │ │ │ │ │ └─ AND\n" + - " │ │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ │ ├─ n.name:1!null\n" + - " │ │ │ │ │ │ └─ B (longtext)\n" + - " │ │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ │ ├─ n.name:1!null\n" + - " │ │ │ │ │ └─ Bÿ (longtext)\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ an.name LIKE '%a%'\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ keys: [ci.person_id:12!null]\n" + - " │ │ ├─ colSet: (1-8)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_name\n" + - " │ │ └─ columns: [person_id name]\n" + - " │ └─ TableAlias(ml)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ lt.link:1!null\n" + - " │ └─ features (longtext)\n" + - " └─ TableAlias(lt)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " │ ├─ pi.person_id:13!null\n" + + " │ └─ an.person_id:18!null\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.id:5!null\n" + + " │ │ └─ pi.person_id:13!null\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ lt.id:11!null\n" + + " │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ ├─ InnerJoin\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:10!null\n" + + " │ │ │ │ └─ ml.linked_movie_id:3!null\n" + + " │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ ml.linked_movie_id:3!null\n" + + " │ │ │ │ │ └─ t.id:0!null\n" + + " │ │ │ │ ├─ Filter\n" + + " │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ │ │ │ │ ├─ t.production_year:2\n" + + " │ │ │ │ │ │ │ └─ 1980 (smallint)\n" + + " │ │ │ │ │ │ └─ LessThanOrEqual\n" + + " │ │ │ │ │ │ ├─ t.production_year:2\n" + + " │ │ │ │ │ │ └─ 1995 (smallint)\n" + + " │ │ │ │ │ └─ TableAlias(t)\n" + + " │ │ │ │ │ └─ ProcessTable\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: title\n" + + " │ │ │ │ │ └─ columns: [id title production_year]\n" + + " │ │ │ │ └─ TableAlias(ml)\n" + + " │ │ │ │ └─ ProcessTable\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: movie_link\n" + + " │ │ │ │ └─ columns: [linked_movie_id link_type_id]\n" + + " │ │ │ └─ InnerJoin\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.person_id:9!null\n" + + " │ │ │ │ └─ n.id:5!null\n" + + " │ │ │ ├─ Filter\n" + + " │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + + " │ │ │ │ │ │ │ └─ A (longtext)\n" + + " │ │ │ │ │ │ └─ LessThanOrEqual\n" + + " │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + + " │ │ │ │ │ │ └─ F (longtext)\n" + + " │ │ │ │ │ └─ Or\n" + + " │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ ├─ n.gender:2\n" + + " │ │ │ │ │ │ └─ m (longtext)\n" + + " │ │ │ │ │ └─ AND\n" + + " │ │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ │ ├─ n.gender:2\n" + + " │ │ │ │ │ │ └─ f (longtext)\n" + + " │ │ │ │ │ └─ AND\n" + + " │ │ │ │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ │ │ │ ├─ n.name:1!null\n" + + " │ │ │ │ │ │ └─ B (longtext)\n" + + " │ │ │ │ │ └─ LessThanOrEqual\n" + + " │ │ │ │ │ ├─ n.name:1!null\n" + + " │ │ │ │ │ └─ Bÿ (longtext)\n" + + " │ │ │ │ └─ TableAlias(n)\n" + + " │ │ │ │ └─ ProcessTable\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: name\n" + + " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + + " │ │ │ └─ TableAlias(ci)\n" + + " │ │ │ └─ ProcessTable\n" + + " │ │ │ └─ Table\n" + + " │ │ │ ├─ name: cast_info\n" + + " │ │ │ └─ columns: [person_id movie_id]\n" + + " │ │ └─ Filter\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ lt.link:1!null\n" + + " │ │ │ └─ features (longtext)\n" + + " │ │ └─ TableAlias(lt)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: link_type\n" + + " │ │ └─ columns: [id link]\n" + + " │ └─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.id:16!null\n" + + " │ │ └─ pi.info_type_id:14!null\n" + + " │ ├─ Filter\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ pi.note:2\n" + + " │ │ │ └─ Volker Boehm (longtext)\n" + + " │ │ └─ TableAlias(pi)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id note]\n" + + " │ └─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ mini biography (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ an.name LIKE '%a%'\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:9!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as of_person, min(t.title) as biography_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ InnerJoin\n" + - " ├─ ((t.id = ci.movie_id) AND (ml.linked_movie_id = t.id))\n" + - " ├─ Filter\n" + - " │ ├─ ((t.production_year >= 1980) AND (t.production_year <= 1995))\n" + - " │ └─ TableAlias(t)\n" + - " │ └─ Table\n" + - " │ ├─ name: title\n" + - " │ └─ columns: [id title production_year]\n" + - " └─ InnerJoin\n" + - " ├─ (((n.id = pi.person_id) AND (pi.person_id = an.person_id)) AND (pi.person_id = ci.person_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = pi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (pi.note = 'Volker Boehm')\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id note]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'mini biography')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ InnerJoin\n" + - " ├─ (lt.id = ml.link_type_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ (n.id = an.person_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (ci.person_id = n.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (((n.name_pcode_cf >= 'A') AND (n.name_pcode_cf <= 'F')) AND ((n.gender = 'm') OR ((n.gender = 'f') AND ((n.name >= 'B') AND (n.name <= 'Bÿ')))))\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ an.name LIKE '%a%'\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ columns: [person_id name]\n" + - " │ │ └─ keys: ci.person_id\n" + - " │ └─ TableAlias(ml)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ (lt.link = 'features')\n" + - " └─ TableAlias(lt)\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " └─ LookupJoin\n" + + " ├─ ((n.id = an.person_id) AND (pi.person_id = an.person_id))\n" + + " ├─ InnerJoin\n" + + " │ ├─ (n.id = pi.person_id)\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (lt.id = ml.link_type_id)\n" + + " │ │ ├─ InnerJoin\n" + + " │ │ │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + + " │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ ├─ (ml.linked_movie_id = t.id)\n" + + " │ │ │ │ ├─ Filter\n" + + " │ │ │ │ │ ├─ ((t.production_year >= 1980) AND (t.production_year <= 1995))\n" + + " │ │ │ │ │ └─ TableAlias(t)\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: title\n" + + " │ │ │ │ │ └─ columns: [id title production_year]\n" + + " │ │ │ │ └─ TableAlias(ml)\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: movie_link\n" + + " │ │ │ │ └─ columns: [linked_movie_id link_type_id]\n" + + " │ │ │ └─ InnerJoin\n" + + " │ │ │ ├─ (ci.person_id = n.id)\n" + + " │ │ │ ├─ Filter\n" + + " │ │ │ │ ├─ (((n.name_pcode_cf >= 'A') AND (n.name_pcode_cf <= 'F')) AND ((n.gender = 'm') OR ((n.gender = 'f') AND ((n.name >= 'B') AND (n.name <= 'Bÿ')))))\n" + + " │ │ │ │ └─ TableAlias(n)\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: name\n" + + " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + + " │ │ │ └─ TableAlias(ci)\n" + + " │ │ │ └─ Table\n" + + " │ │ │ ├─ name: cast_info\n" + + " │ │ │ └─ columns: [person_id movie_id]\n" + + " │ │ └─ Filter\n" + + " │ │ ├─ (lt.link = 'features')\n" + + " │ │ └─ TableAlias(lt)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: link_type\n" + + " │ │ └─ columns: [id link]\n" + + " │ └─ InnerJoin\n" + + " │ ├─ (it.id = pi.info_type_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (pi.note = 'Volker Boehm')\n" + + " │ │ └─ TableAlias(pi)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id note]\n" + + " │ └─ Filter\n" + + " │ ├─ (it.info = 'mini biography')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ an.name LIKE '%a%'\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as of_person, min(t.title) as biography_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ InnerJoin\n" + - " ├─ ((t.id = ci.movie_id) AND (ml.linked_movie_id = t.id))\n" + - " ├─ Filter\n" + - " │ ├─ ((t.production_year >= 1980) AND (t.production_year <= 1995))\n" + - " │ └─ TableAlias(t)\n" + - " │ └─ Table\n" + - " │ ├─ name: title\n" + - " │ └─ columns: [id title production_year]\n" + - " └─ InnerJoin\n" + - " ├─ (((n.id = pi.person_id) AND (pi.person_id = an.person_id)) AND (pi.person_id = ci.person_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = pi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (pi.note = 'Volker Boehm')\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id note]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'mini biography')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ InnerJoin\n" + - " ├─ (lt.id = ml.link_type_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ (n.id = an.person_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (ci.person_id = n.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (((n.name_pcode_cf >= 'A') AND (n.name_pcode_cf <= 'F')) AND ((n.gender = 'm') OR ((n.gender = 'f') AND ((n.name >= 'B') AND (n.name <= 'Bÿ')))))\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ an.name LIKE '%a%'\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ columns: [person_id name]\n" + - " │ │ └─ keys: ci.person_id\n" + - " │ └─ TableAlias(ml)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ (lt.link = 'features')\n" + - " └─ TableAlias(lt)\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " └─ LookupJoin\n" + + " ├─ ((n.id = an.person_id) AND (pi.person_id = an.person_id))\n" + + " ├─ InnerJoin\n" + + " │ ├─ (n.id = pi.person_id)\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (lt.id = ml.link_type_id)\n" + + " │ │ ├─ InnerJoin\n" + + " │ │ │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + + " │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ ├─ (ml.linked_movie_id = t.id)\n" + + " │ │ │ │ ├─ Filter\n" + + " │ │ │ │ │ ├─ ((t.production_year >= 1980) AND (t.production_year <= 1995))\n" + + " │ │ │ │ │ └─ TableAlias(t)\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: title\n" + + " │ │ │ │ │ └─ columns: [id title production_year]\n" + + " │ │ │ │ └─ TableAlias(ml)\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: movie_link\n" + + " │ │ │ │ └─ columns: [linked_movie_id link_type_id]\n" + + " │ │ │ └─ InnerJoin\n" + + " │ │ │ ├─ (ci.person_id = n.id)\n" + + " │ │ │ ├─ Filter\n" + + " │ │ │ │ ├─ (((n.name_pcode_cf >= 'A') AND (n.name_pcode_cf <= 'F')) AND ((n.gender = 'm') OR ((n.gender = 'f') AND ((n.name >= 'B') AND (n.name <= 'Bÿ')))))\n" + + " │ │ │ │ └─ TableAlias(n)\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: name\n" + + " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + + " │ │ │ └─ TableAlias(ci)\n" + + " │ │ │ └─ Table\n" + + " │ │ │ ├─ name: cast_info\n" + + " │ │ │ └─ columns: [person_id movie_id]\n" + + " │ │ └─ Filter\n" + + " │ │ ├─ (lt.link = 'features')\n" + + " │ │ └─ TableAlias(lt)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: link_type\n" + + " │ │ └─ columns: [id link]\n" + + " │ └─ InnerJoin\n" + + " │ ├─ (it.id = pi.info_type_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (pi.note = 'Volker Boehm')\n" + + " │ │ └─ TableAlias(pi)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id note]\n" + + " │ └─ Filter\n" + + " │ ├─ (it.info = 'mini biography')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ an.name LIKE '%a%'\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -31804,256 +30607,248 @@ WHERE an.name LIKE '%a%' ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->of_person:0, min(t.title):1!null->biography_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:9!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(n.name:6!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + - " └─ InnerJoin\n" + + " └─ LookupJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ t.id:0!null\n" + - " │ │ └─ ci.movie_id:13!null\n" + + " │ │ ├─ n.id:5!null\n" + + " │ │ └─ an.person_id:18!null\n" + " │ └─ Eq\n" + - " │ ├─ ml.linked_movie_id:16!null\n" + - " │ └─ t.id:0!null\n" + - " ├─ Filter\n" + - " │ ├─ AND\n" + - " │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ ├─ t.production_year:2\n" + - " │ │ │ └─ 1980 (smallint)\n" + - " │ │ └─ LessThanOrEqual\n" + - " │ │ ├─ t.production_year:2\n" + - " │ │ └─ 1984 (smallint)\n" + - " │ └─ TableAlias(t)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: title\n" + - " │ └─ columns: [id title production_year]\n" + - " └─ InnerJoin\n" + - " ├─ AND\n" + - " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:8!null\n" + - " │ │ │ └─ pi.person_id:3!null\n" + - " │ │ └─ Eq\n" + - " │ │ ├─ pi.person_id:3!null\n" + - " │ │ └─ an.person_id:14!null\n" + - " │ └─ Eq\n" + - " │ ├─ pi.person_id:3!null\n" + - " │ └─ ci.person_id:12!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:6!null\n" + - " │ │ └─ pi.info_type_id:4!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ pi.note:2\n" + - " │ │ │ └─ Volker Boehm (longtext)\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id note]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ mini biography (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ lt.id:18!null\n" + - " │ └─ ml.link_type_id:17!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:13!null\n" + - " │ │ └─ ml.linked_movie_id:16!null\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:8!null\n" + - " │ │ │ └─ an.person_id:14!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ci.person_id:12!null\n" + - " │ │ │ │ └─ n.id:8!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + - " │ │ │ │ │ │ │ └─ D (longtext)\n" + - " │ │ │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + - " │ │ │ │ │ │ └─ Dÿ (longtext)\n" + - " │ │ │ │ │ └─ Eq\n" + - " │ │ │ │ │ ├─ n.gender:2\n" + - " │ │ │ │ │ └─ m (longtext)\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ an.name LIKE '%a%'\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ keys: [ci.person_id:12!null]\n" + - " │ │ ├─ colSet: (1-8)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_name\n" + - " │ │ └─ columns: [person_id name]\n" + - " │ └─ TableAlias(ml)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ lt.link:1!null\n" + - " │ └─ features (longtext)\n" + - " └─ TableAlias(lt)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " │ ├─ pi.person_id:13!null\n" + + " │ └─ an.person_id:18!null\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ n.id:5!null\n" + + " │ │ └─ pi.person_id:13!null\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ lt.id:11!null\n" + + " │ │ │ └─ ml.link_type_id:4!null\n" + + " │ │ ├─ InnerJoin\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.movie_id:10!null\n" + + " │ │ │ │ └─ ml.linked_movie_id:3!null\n" + + " │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ ├─ Eq\n" + + " │ │ │ │ │ ├─ ml.linked_movie_id:3!null\n" + + " │ │ │ │ │ └─ t.id:0!null\n" + + " │ │ │ │ ├─ Filter\n" + + " │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ │ │ │ │ ├─ t.production_year:2\n" + + " │ │ │ │ │ │ │ └─ 1980 (smallint)\n" + + " │ │ │ │ │ │ └─ LessThanOrEqual\n" + + " │ │ │ │ │ │ ├─ t.production_year:2\n" + + " │ │ │ │ │ │ └─ 1984 (smallint)\n" + + " │ │ │ │ │ └─ TableAlias(t)\n" + + " │ │ │ │ │ └─ ProcessTable\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: title\n" + + " │ │ │ │ │ └─ columns: [id title production_year]\n" + + " │ │ │ │ └─ TableAlias(ml)\n" + + " │ │ │ │ └─ ProcessTable\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: movie_link\n" + + " │ │ │ │ └─ columns: [linked_movie_id link_type_id]\n" + + " │ │ │ └─ InnerJoin\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ ci.person_id:9!null\n" + + " │ │ │ │ └─ n.id:5!null\n" + + " │ │ │ ├─ Filter\n" + + " │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ ├─ AND\n" + + " │ │ │ │ │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + + " │ │ │ │ │ │ │ └─ D (longtext)\n" + + " │ │ │ │ │ │ └─ LessThanOrEqual\n" + + " │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + + " │ │ │ │ │ │ └─ Dÿ (longtext)\n" + + " │ │ │ │ │ └─ Eq\n" + + " │ │ │ │ │ ├─ n.gender:2\n" + + " │ │ │ │ │ └─ m (longtext)\n" + + " │ │ │ │ └─ TableAlias(n)\n" + + " │ │ │ │ └─ ProcessTable\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: name\n" + + " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + + " │ │ │ └─ TableAlias(ci)\n" + + " │ │ │ └─ ProcessTable\n" + + " │ │ │ └─ Table\n" + + " │ │ │ ├─ name: cast_info\n" + + " │ │ │ └─ columns: [person_id movie_id]\n" + + " │ │ └─ Filter\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ lt.link:1!null\n" + + " │ │ │ └─ features (longtext)\n" + + " │ │ └─ TableAlias(lt)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: link_type\n" + + " │ │ └─ columns: [id link]\n" + + " │ └─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.id:16!null\n" + + " │ │ └─ pi.info_type_id:14!null\n" + + " │ ├─ Filter\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ pi.note:2\n" + + " │ │ │ └─ Volker Boehm (longtext)\n" + + " │ │ └─ TableAlias(pi)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id note]\n" + + " │ └─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ mini biography (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ an.name LIKE '%a%'\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:9!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as of_person, min(t.title) as biography_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ InnerJoin\n" + - " ├─ ((t.id = ci.movie_id) AND (ml.linked_movie_id = t.id))\n" + - " ├─ Filter\n" + - " │ ├─ ((t.production_year >= 1980) AND (t.production_year <= 1984))\n" + - " │ └─ TableAlias(t)\n" + - " │ └─ Table\n" + - " │ ├─ name: title\n" + - " │ └─ columns: [id title production_year]\n" + - " └─ InnerJoin\n" + - " ├─ (((n.id = pi.person_id) AND (pi.person_id = an.person_id)) AND (pi.person_id = ci.person_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = pi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (pi.note = 'Volker Boehm')\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id note]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'mini biography')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ InnerJoin\n" + - " ├─ (lt.id = ml.link_type_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ (n.id = an.person_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (ci.person_id = n.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (((n.name_pcode_cf >= 'D') AND (n.name_pcode_cf <= 'Dÿ')) AND (n.gender = 'm'))\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ an.name LIKE '%a%'\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ columns: [person_id name]\n" + - " │ │ └─ keys: ci.person_id\n" + - " │ └─ TableAlias(ml)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ (lt.link = 'features')\n" + - " └─ TableAlias(lt)\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " └─ LookupJoin\n" + + " ├─ ((n.id = an.person_id) AND (pi.person_id = an.person_id))\n" + + " ├─ InnerJoin\n" + + " │ ├─ (n.id = pi.person_id)\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (lt.id = ml.link_type_id)\n" + + " │ │ ├─ InnerJoin\n" + + " │ │ │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + + " │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ ├─ (ml.linked_movie_id = t.id)\n" + + " │ │ │ │ ├─ Filter\n" + + " │ │ │ │ │ ├─ ((t.production_year >= 1980) AND (t.production_year <= 1984))\n" + + " │ │ │ │ │ └─ TableAlias(t)\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: title\n" + + " │ │ │ │ │ └─ columns: [id title production_year]\n" + + " │ │ │ │ └─ TableAlias(ml)\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: movie_link\n" + + " │ │ │ │ └─ columns: [linked_movie_id link_type_id]\n" + + " │ │ │ └─ InnerJoin\n" + + " │ │ │ ├─ (ci.person_id = n.id)\n" + + " │ │ │ ├─ Filter\n" + + " │ │ │ │ ├─ (((n.name_pcode_cf >= 'D') AND (n.name_pcode_cf <= 'Dÿ')) AND (n.gender = 'm'))\n" + + " │ │ │ │ └─ TableAlias(n)\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: name\n" + + " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + + " │ │ │ └─ TableAlias(ci)\n" + + " │ │ │ └─ Table\n" + + " │ │ │ ├─ name: cast_info\n" + + " │ │ │ └─ columns: [person_id movie_id]\n" + + " │ │ └─ Filter\n" + + " │ │ ├─ (lt.link = 'features')\n" + + " │ │ └─ TableAlias(lt)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: link_type\n" + + " │ │ └─ columns: [id link]\n" + + " │ └─ InnerJoin\n" + + " │ ├─ (it.id = pi.info_type_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (pi.note = 'Volker Boehm')\n" + + " │ │ └─ TableAlias(pi)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id note]\n" + + " │ └─ Filter\n" + + " │ ├─ (it.info = 'mini biography')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ an.name LIKE '%a%'\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as of_person, min(t.title) as biography_movie]\n" + " └─ GroupBy\n" + " ├─ SelectedExprs(MIN(n.name), MIN(t.title))\n" + " ├─ Grouping()\n" + - " └─ InnerJoin\n" + - " ├─ ((t.id = ci.movie_id) AND (ml.linked_movie_id = t.id))\n" + - " ├─ Filter\n" + - " │ ├─ ((t.production_year >= 1980) AND (t.production_year <= 1984))\n" + - " │ └─ TableAlias(t)\n" + - " │ └─ Table\n" + - " │ ├─ name: title\n" + - " │ └─ columns: [id title production_year]\n" + - " └─ InnerJoin\n" + - " ├─ (((n.id = pi.person_id) AND (pi.person_id = an.person_id)) AND (pi.person_id = ci.person_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = pi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (pi.note = 'Volker Boehm')\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id note]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'mini biography')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ InnerJoin\n" + - " ├─ (lt.id = ml.link_type_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ (n.id = an.person_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (ci.person_id = n.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (((n.name_pcode_cf >= 'D') AND (n.name_pcode_cf <= 'Dÿ')) AND (n.gender = 'm'))\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ an.name LIKE '%a%'\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ columns: [person_id name]\n" + - " │ │ └─ keys: ci.person_id\n" + - " │ └─ TableAlias(ml)\n" + - " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ (lt.link = 'features')\n" + - " └─ TableAlias(lt)\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " └─ LookupJoin\n" + + " ├─ ((n.id = an.person_id) AND (pi.person_id = an.person_id))\n" + + " ├─ InnerJoin\n" + + " │ ├─ (n.id = pi.person_id)\n" + + " │ ├─ InnerJoin\n" + + " │ │ ├─ (lt.id = ml.link_type_id)\n" + + " │ │ ├─ InnerJoin\n" + + " │ │ │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + + " │ │ │ ├─ InnerJoin\n" + + " │ │ │ │ ├─ (ml.linked_movie_id = t.id)\n" + + " │ │ │ │ ├─ Filter\n" + + " │ │ │ │ │ ├─ ((t.production_year >= 1980) AND (t.production_year <= 1984))\n" + + " │ │ │ │ │ └─ TableAlias(t)\n" + + " │ │ │ │ │ └─ Table\n" + + " │ │ │ │ │ ├─ name: title\n" + + " │ │ │ │ │ └─ columns: [id title production_year]\n" + + " │ │ │ │ └─ TableAlias(ml)\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: movie_link\n" + + " │ │ │ │ └─ columns: [linked_movie_id link_type_id]\n" + + " │ │ │ └─ InnerJoin\n" + + " │ │ │ ├─ (ci.person_id = n.id)\n" + + " │ │ │ ├─ Filter\n" + + " │ │ │ │ ├─ (((n.name_pcode_cf >= 'D') AND (n.name_pcode_cf <= 'Dÿ')) AND (n.gender = 'm'))\n" + + " │ │ │ │ └─ TableAlias(n)\n" + + " │ │ │ │ └─ Table\n" + + " │ │ │ │ ├─ name: name\n" + + " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + + " │ │ │ └─ TableAlias(ci)\n" + + " │ │ │ └─ Table\n" + + " │ │ │ ├─ name: cast_info\n" + + " │ │ │ └─ columns: [person_id movie_id]\n" + + " │ │ └─ Filter\n" + + " │ │ ├─ (lt.link = 'features')\n" + + " │ │ └─ TableAlias(lt)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: link_type\n" + + " │ │ └─ columns: [id link]\n" + + " │ └─ InnerJoin\n" + + " │ ├─ (it.id = pi.info_type_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (pi.note = 'Volker Boehm')\n" + + " │ │ └─ TableAlias(pi)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: person_info\n" + + " │ │ └─ columns: [person_id info_type_id note]\n" + + " │ └─ Filter\n" + + " │ ├─ (it.info = 'mini biography')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ Filter\n" + + " ├─ an.name LIKE '%a%'\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -32098,15 +30893,15 @@ WHERE an.name IS NOT NULL ExpectedPlan: "Project\n" + " ├─ columns: [min(n.name):0!null->cast_member_name:0, min(pi.info):1!null->cast_member_info:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(n.name:9!null), MIN(pi.info:4!null)\n" + + " ├─ select: MIN(n.name:7!null), MIN(pi.info:4!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ t.id:0!null\n" + - " │ │ └─ ci.movie_id:13!null\n" + + " │ │ └─ ci.movie_id:17!null\n" + " │ └─ Eq\n" + - " │ ├─ ml.linked_movie_id:16!null\n" + + " │ ├─ ml.linked_movie_id:10!null\n" + " │ └─ t.id:0!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + @@ -32124,122 +30919,125 @@ WHERE an.name IS NOT NULL " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ AND\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:8!null\n" + - " │ │ │ └─ pi.person_id:2!null\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ Eq\n" + + " │ │ │ │ ├─ n.id:6!null\n" + + " │ │ │ │ └─ pi.person_id:2!null\n" + + " │ │ │ └─ Eq\n" + + " │ │ │ ├─ it.id:14!null\n" + + " │ │ │ └─ pi.info_type_id:3!null\n" + " │ │ └─ Eq\n" + " │ │ ├─ pi.person_id:2!null\n" + - " │ │ └─ an.person_id:14!null\n" + + " │ │ └─ an.person_id:18!null\n" + " │ └─ Eq\n" + " │ ├─ pi.person_id:2!null\n" + - " │ └─ ci.person_id:12!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.id:6!null\n" + - " │ │ └─ pi.info_type_id:3!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ NOT\n" + - " │ │ │ └─ pi.note:3 IS NULL\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id info note]\n" + - " │ └─ Filter\n" + - " │ ├─ Eq\n" + - " │ │ ├─ it.info:1!null\n" + - " │ │ └─ mini biography (longtext)\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ ProcessTable\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + + " │ └─ ci.person_id:16!null\n" + + " ├─ Filter\n" + + " │ ├─ NOT\n" + + " │ │ └─ pi.note:3 IS NULL\n" + + " │ └─ TableAlias(pi)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: person_info\n" + + " │ └─ columns: [person_id info_type_id info note]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ lt.id:18!null\n" + - " │ └─ ml.link_type_id:17!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:13!null\n" + - " │ │ └─ ml.linked_movie_id:16!null\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ n.id:8!null\n" + - " │ │ │ └─ an.person_id:14!null\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ci.person_id:12!null\n" + - " │ │ │ │ └─ n.id:8!null\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ ├─ AND\n" + - " │ │ │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + - " │ │ │ │ │ │ │ └─ A (longtext)\n" + - " │ │ │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ │ │ ├─ n.name_pcode_cf:3\n" + - " │ │ │ │ │ │ └─ F (longtext)\n" + - " │ │ │ │ │ └─ Or\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ n.gender:2\n" + - " │ │ │ │ │ │ └─ m (longtext)\n" + - " │ │ │ │ │ └─ AND\n" + - " │ │ │ │ │ ├─ Eq\n" + - " │ │ │ │ │ │ ├─ n.gender:2\n" + - " │ │ │ │ │ │ └─ f (longtext)\n" + - " │ │ │ │ │ └─ AND\n" + - " │ │ │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ │ │ ├─ n.name:1!null\n" + - " │ │ │ │ │ │ └─ A (longtext)\n" + - " │ │ │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ │ │ ├─ n.name:1!null\n" + - " │ │ │ │ │ └─ Aÿ (longtext)\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ ProcessTable\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ an.name:1!null IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ an.name LIKE '%a%'\n" + - " │ │ │ └─ AND\n" + - " │ │ │ ├─ GreaterThanOrEqual\n" + - " │ │ │ │ ├─ an.name:1!null\n" + - " │ │ │ │ └─ A (longtext)\n" + - " │ │ │ └─ LessThanOrEqual\n" + - " │ │ │ ├─ an.name:1!null\n" + - " │ │ │ └─ Aÿ (longtext)\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ keys: [ci.person_id:12!null]\n" + - " │ │ ├─ colSet: (1-8)\n" + - " │ │ ├─ tableId: 1\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: aka_name\n" + - " │ │ └─ columns: [person_id name]\n" + - " │ └─ TableAlias(ml)\n" + + " │ │ ├─ n.id:6!null\n" + + " │ │ └─ an.person_id:18!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.person_id:16!null\n" + + " │ └─ n.id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ │ ├─ n.name_pcode_cf:3\n" + + " │ │ │ │ └─ A (longtext)\n" + + " │ │ │ └─ LessThanOrEqual\n" + + " │ │ │ ├─ n.name_pcode_cf:3\n" + + " │ │ │ └─ F (longtext)\n" + + " │ │ └─ Or\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ n.gender:2\n" + + " │ │ │ └─ m (longtext)\n" + + " │ │ └─ AND\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ n.gender:2\n" + + " │ │ │ └─ f (longtext)\n" + + " │ │ └─ AND\n" + + " │ │ ├─ GreaterThanOrEqual\n" + + " │ │ │ ├─ n.name:1!null\n" + + " │ │ │ └─ A (longtext)\n" + + " │ │ └─ LessThanOrEqual\n" + + " │ │ ├─ n.name:1!null\n" + + " │ │ └─ Aÿ (longtext)\n" + + " │ └─ TableAlias(n)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ HashIn\n" + - " │ ├─ lt.link:1!null\n" + - " │ └─ TUPLE(references (longtext), referenced in (longtext), features (longtext), featured in (longtext))\n" + - " └─ TableAlias(lt)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender name_pcode_cf]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ lt.id:12!null\n" + + " │ │ └─ ml.link_type_id:11!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:17!null\n" + + " │ └─ ml.linked_movie_id:10!null\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [linked_movie_id link_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ HashIn\n" + + " │ │ ├─ lt.link:1!null\n" + + " │ │ └─ TUPLE(references (longtext), referenced in (longtext), features (longtext), featured in (longtext))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ it.info:1!null\n" + + " │ │ └─ mini biography (longtext)\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ Filter\n" + + " ├─ AND\n" + + " │ ├─ NOT\n" + + " │ │ └─ an.name:1!null IS NULL\n" + + " │ └─ Or\n" + + " │ ├─ an.name LIKE '%a%'\n" + + " │ └─ AND\n" + + " │ ├─ GreaterThanOrEqual\n" + + " │ │ ├─ an.name:1!null\n" + + " │ │ └─ A (longtext)\n" + + " │ └─ LessThanOrEqual\n" + + " │ ├─ an.name:1!null\n" + + " │ └─ Aÿ (longtext)\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:16!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(n.name) as cast_member_name, min(pi.info) as cast_member_info]\n" + @@ -32255,56 +31053,53 @@ WHERE an.name IS NOT NULL " │ ├─ name: title\n" + " │ └─ columns: [id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (((n.id = pi.person_id) AND (pi.person_id = an.person_id)) AND (pi.person_id = ci.person_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = pi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (NOT(pi.note IS NULL))\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id info note]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'mini biography')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ InnerJoin\n" + - " ├─ (lt.id = ml.link_type_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ (n.id = an.person_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (ci.person_id = n.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (((n.name_pcode_cf >= 'A') AND (n.name_pcode_cf <= 'F')) AND ((n.gender = 'm') OR ((n.gender = 'f') AND ((n.name >= 'A') AND (n.name <= 'Aÿ')))))\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(an.name IS NULL)) AND (an.name LIKE '%a%' OR ((an.name >= 'A') AND (an.name <= 'Aÿ'))))\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ columns: [person_id name]\n" + - " │ │ └─ keys: ci.person_id\n" + - " │ └─ TableAlias(ml)\n" + + " ├─ ((((n.id = pi.person_id) AND (it.id = pi.info_type_id)) AND (pi.person_id = an.person_id)) AND (pi.person_id = ci.person_id))\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(pi.note IS NULL))\n" + + " │ └─ TableAlias(pi)\n" + + " │ └─ Table\n" + + " │ ├─ name: person_info\n" + + " │ └─ columns: [person_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ ((n.id = an.person_id) AND (ci.person_id = n.id))\n" + + " ├─ Filter\n" + + " │ ├─ (((n.name_pcode_cf >= 'A') AND (n.name_pcode_cf <= 'F')) AND ((n.gender = 'm') OR ((n.gender = 'f') AND ((n.name >= 'A') AND (n.name <= 'Aÿ')))))\n" + + " │ └─ TableAlias(n)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ (lt.link HASH IN ('references', 'referenced in', 'features', 'featured in'))\n" + - " └─ TableAlias(lt)\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender name_pcode_cf]\n" + + " └─ InnerJoin\n" + + " ├─ ((lt.id = ml.link_type_id) AND (ci.movie_id = ml.linked_movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [linked_movie_id link_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (lt.link HASH IN ('references', 'referenced in', 'features', 'featured in'))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'mini biography')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ Filter\n" + + " ├─ ((NOT(an.name IS NULL)) AND (an.name LIKE '%a%' OR ((an.name >= 'A') AND (an.name <= 'Aÿ'))))\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(n.name) as cast_member_name, min(pi.info) as cast_member_info]\n" + @@ -32320,56 +31115,53 @@ WHERE an.name IS NOT NULL " │ ├─ name: title\n" + " │ └─ columns: [id production_year]\n" + " └─ InnerJoin\n" + - " ├─ (((n.id = pi.person_id) AND (pi.person_id = an.person_id)) AND (pi.person_id = ci.person_id))\n" + - " ├─ InnerJoin\n" + - " │ ├─ (it.id = pi.info_type_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (NOT(pi.note IS NULL))\n" + - " │ │ └─ TableAlias(pi)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: person_info\n" + - " │ │ └─ columns: [person_id info_type_id info note]\n" + - " │ └─ Filter\n" + - " │ ├─ (it.info = 'mini biography')\n" + - " │ └─ TableAlias(it)\n" + - " │ └─ Table\n" + - " │ ├─ name: info_type\n" + - " │ └─ columns: [id info]\n" + - " └─ InnerJoin\n" + - " ├─ (lt.id = ml.link_type_id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = ml.linked_movie_id)\n" + - " │ ├─ LookupJoin\n" + - " │ │ ├─ (n.id = an.person_id)\n" + - " │ │ ├─ InnerJoin\n" + - " │ │ │ ├─ (ci.person_id = n.id)\n" + - " │ │ │ ├─ Filter\n" + - " │ │ │ │ ├─ (((n.name_pcode_cf >= 'A') AND (n.name_pcode_cf <= 'F')) AND ((n.gender = 'm') OR ((n.gender = 'f') AND ((n.name >= 'A') AND (n.name <= 'Aÿ')))))\n" + - " │ │ │ │ └─ TableAlias(n)\n" + - " │ │ │ │ └─ Table\n" + - " │ │ │ │ ├─ name: name\n" + - " │ │ │ │ └─ columns: [id name gender name_pcode_cf]\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id]\n" + - " │ │ └─ Filter\n" + - " │ │ ├─ ((NOT(an.name IS NULL)) AND (an.name LIKE '%a%' OR ((an.name >= 'A') AND (an.name <= 'Aÿ'))))\n" + - " │ │ └─ TableAlias(an)\n" + - " │ │ └─ IndexedTableAccess(aka_name)\n" + - " │ │ ├─ index: [aka_name.person_id]\n" + - " │ │ ├─ columns: [person_id name]\n" + - " │ │ └─ keys: ci.person_id\n" + - " │ └─ TableAlias(ml)\n" + + " ├─ ((((n.id = pi.person_id) AND (it.id = pi.info_type_id)) AND (pi.person_id = an.person_id)) AND (pi.person_id = ci.person_id))\n" + + " ├─ Filter\n" + + " │ ├─ (NOT(pi.note IS NULL))\n" + + " │ └─ TableAlias(pi)\n" + + " │ └─ Table\n" + + " │ ├─ name: person_info\n" + + " │ └─ columns: [person_id info_type_id info note]\n" + + " └─ InnerJoin\n" + + " ├─ ((n.id = an.person_id) AND (ci.person_id = n.id))\n" + + " ├─ Filter\n" + + " │ ├─ (((n.name_pcode_cf >= 'A') AND (n.name_pcode_cf <= 'F')) AND ((n.gender = 'm') OR ((n.gender = 'f') AND ((n.name >= 'A') AND (n.name <= 'Aÿ')))))\n" + + " │ └─ TableAlias(n)\n" + " │ └─ Table\n" + - " │ ├─ name: movie_link\n" + - " │ └─ columns: [linked_movie_id link_type_id]\n" + - " └─ Filter\n" + - " ├─ (lt.link HASH IN ('references', 'referenced in', 'features', 'featured in'))\n" + - " └─ TableAlias(lt)\n" + - " └─ Table\n" + - " ├─ name: link_type\n" + - " └─ columns: [id link]\n" + + " │ ├─ name: name\n" + + " │ └─ columns: [id name gender name_pcode_cf]\n" + + " └─ InnerJoin\n" + + " ├─ ((lt.id = ml.link_type_id) AND (ci.movie_id = ml.linked_movie_id))\n" + + " ├─ TableAlias(ml)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_link\n" + + " │ └─ columns: [linked_movie_id link_type_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (lt.link HASH IN ('references', 'referenced in', 'features', 'featured in'))\n" + + " │ └─ TableAlias(lt)\n" + + " │ └─ Table\n" + + " │ ├─ name: link_type\n" + + " │ └─ columns: [id link]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (it.info = 'mini biography')\n" + + " │ └─ TableAlias(it)\n" + + " │ └─ Table\n" + + " │ ├─ name: info_type\n" + + " │ └─ columns: [id info]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id]\n" + + " └─ Filter\n" + + " ├─ ((NOT(an.name IS NULL)) AND (an.name LIKE '%a%' OR ((an.name >= 'A') AND (an.name <= 'Aÿ'))))\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -32403,12 +31195,12 @@ WHERE ci.note ='(voice: English version)' ExpectedPlan: "Project\n" + " ├─ columns: [min(an1.name):0!null->actress_pseudonym:0, min(t.title):1!null->japanese_movie_dubbed:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an1.name:14!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an1.name:16!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + + " │ │ ├─ ci.movie_id:12!null\n" + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + @@ -32420,7 +31212,7 @@ WHERE ci.note ='(voice: English version)' " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ci.role_id:12!null\n" + + " │ ├─ ci.role_id:14!null\n" + " │ └─ rt.id:2!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -32434,11 +31226,11 @@ WHERE ci.note ='(voice: English version)' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ an1.person_id:13!null\n" + + " │ │ ├─ an1.person_id:15!null\n" + " │ │ └─ n1.id:4!null\n" + " │ └─ Eq\n" + " │ ├─ n1.id:4!null\n" + - " │ └─ ci.person_id:9!null\n" + + " │ └─ ci.person_id:11!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ n1.name LIKE '%Yo%'\n" + @@ -32450,51 +31242,52 @@ WHERE ci.note ='(voice: English version)' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:7!null\n" + - " │ └─ cn.id:15!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + - " │ │ └─ mc.movie_id:6!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ mc.note LIKE '%(Japan)%'\n" + - " │ │ │ └─ NOT\n" + - " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ (voice: English version) (longtext)\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note role_id]\n" + - " │ └─ TableAlias(an1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:9!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [jp] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.company_id:7!null\n" + + " │ │ └─ cn.id:9!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:12!null\n" + + " │ └─ mc.movie_id:6!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mc.note LIKE '%(Japan)%'\n" + + " │ │ └─ NOT\n" + + " │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [jp] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.note:2\n" + + " │ │ └─ (voice: English version) (longtext)\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note role_id]\n" + + " └─ TableAlias(an1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:11!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an1.name) as actress_pseudonym, min(t.title) as japanese_movie_dubbed]\n" + @@ -32524,33 +31317,32 @@ WHERE ci.note ='(voice: English version)' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mc.note LIKE '%(Japan)%' AND (NOT(mc.note LIKE '%(USA)%')))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ci.note = '(voice: English version)')\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note role_id]\n" + - " │ └─ TableAlias(an1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[jp]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(Japan)%' AND (NOT(mc.note LIKE '%(USA)%')))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[jp]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note = '(voice: English version)')\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note role_id]\n" + + " └─ TableAlias(an1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an1.name) as actress_pseudonym, min(t.title) as japanese_movie_dubbed]\n" + @@ -32580,33 +31372,32 @@ WHERE ci.note ='(voice: English version)' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mc.note LIKE '%(Japan)%' AND (NOT(mc.note LIKE '%(USA)%')))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ci.note = '(voice: English version)')\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note role_id]\n" + - " │ └─ TableAlias(an1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[jp]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(Japan)%' AND (NOT(mc.note LIKE '%(USA)%')))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[jp]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note = '(voice: English version)')\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note role_id]\n" + + " └─ TableAlias(an1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -32645,12 +31436,12 @@ WHERE ci.note ='(voice: English version)' ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->acress_pseudonym:0, min(t.title):1!null->japanese_anime_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:15!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:17!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + + " │ │ ├─ ci.movie_id:13!null\n" + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + @@ -32686,7 +31477,7 @@ WHERE ci.note ='(voice: English version)' " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ci.role_id:13!null\n" + + " │ ├─ ci.role_id:15!null\n" + " │ └─ rt.id:3!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -32700,11 +31491,11 @@ WHERE ci.note ='(voice: English version)' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ an.person_id:14!null\n" + + " │ │ ├─ an.person_id:16!null\n" + " │ │ └─ n.id:5!null\n" + " │ └─ Eq\n" + " │ ├─ n.id:5!null\n" + - " │ └─ ci.person_id:10!null\n" + + " │ └─ ci.person_id:12!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + " │ │ ├─ n.name LIKE '%Yo%'\n" + @@ -32715,56 +31506,57 @@ WHERE ci.note ='(voice: English version)' " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + - " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:8!null\n" + - " │ └─ cn.id:16!null\n" + - " ├─ InnerJoin\n" + - " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:11!null\n" + - " │ │ └─ mc.movie_id:7!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ AND\n" + - " │ │ │ │ ├─ mc.note LIKE '%(Japan)%'\n" + - " │ │ │ │ └─ NOT\n" + - " │ │ │ │ └─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mc.note LIKE '%(2006)%'\n" + - " │ │ │ └─ mc.note LIKE '%(2007)%'\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Filter\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ ci.note:2\n" + - " │ │ │ └─ (voice: English version) (longtext)\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note role_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:10!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [jp] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " └─ InnerJoin\n" + + " ├─ AND\n" + + " │ ├─ Eq\n" + + " │ │ ├─ mc.company_id:8!null\n" + + " │ │ └─ cn.id:10!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:13!null\n" + + " │ └─ mc.movie_id:7!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ AND\n" + + " │ │ │ ├─ mc.note LIKE '%(Japan)%'\n" + + " │ │ │ └─ NOT\n" + + " │ │ │ └─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mc.note LIKE '%(2006)%'\n" + + " │ │ └─ mc.note LIKE '%(2007)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [jp] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ ci.note:2\n" + + " │ │ └─ (voice: English version) (longtext)\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note role_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:12!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as acress_pseudonym, min(t.title) as japanese_anime_movie]\n" + @@ -32796,33 +31588,32 @@ WHERE ci.note ='(voice: English version)' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((mc.note LIKE '%(Japan)%' AND (NOT(mc.note LIKE '%(USA)%'))) AND (mc.note LIKE '%(2006)%' OR mc.note LIKE '%(2007)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ci.note = '(voice: English version)')\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note role_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[jp]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mc.note LIKE '%(Japan)%' AND (NOT(mc.note LIKE '%(USA)%'))) AND (mc.note LIKE '%(2006)%' OR mc.note LIKE '%(2007)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[jp]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note = '(voice: English version)')\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note role_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as acress_pseudonym, min(t.title) as japanese_anime_movie]\n" + @@ -32854,33 +31645,32 @@ WHERE ci.note ='(voice: English version)' " │ ├─ name: name\n" + " │ └─ columns: [id name]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((mc.note LIKE '%(Japan)%' AND (NOT(mc.note LIKE '%(USA)%'))) AND (mc.note LIKE '%(2006)%' OR mc.note LIKE '%(2007)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (ci.note = '(voice: English version)')\n" + - " │ │ └─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id note role_id]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[jp]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ Filter\n" + + " │ ├─ ((mc.note LIKE '%(Japan)%' AND (NOT(mc.note LIKE '%(USA)%'))) AND (mc.note LIKE '%(2006)%' OR mc.note LIKE '%(2007)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[jp]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ Filter\n" + + " │ ├─ (ci.note = '(voice: English version)')\n" + + " │ └─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id note role_id]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -32909,12 +31699,12 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(a1.name):0!null->writer_pseudo_name:0, min(t.title):1!null->movie_title:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(a1.name:11!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(a1.name:13!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:8!null\n" + + " │ │ ├─ ci.movie_id:10!null\n" + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + @@ -32926,7 +31716,7 @@ WHERE cn.country_code ='[us]' " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ci.role_id:9!null\n" + + " │ ├─ ci.role_id:11!null\n" + " │ └─ rt.id:2!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -32940,53 +31730,54 @@ WHERE cn.country_code ='[us]' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ a1.person_id:10!null\n" + + " │ │ ├─ a1.person_id:12!null\n" + " │ │ └─ n1.id:4!null\n" + " │ └─ Eq\n" + " │ ├─ n1.id:4!null\n" + - " │ └─ ci.person_id:7!null\n" + + " │ └─ ci.person_id:9!null\n" + " ├─ TableAlias(n1)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:6!null\n" + - " │ └─ cn.id:12!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:8!null\n" + - " │ │ └─ mc.movie_id:5!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id role_id]\n" + - " │ └─ TableAlias(a1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:7!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:10!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id role_id]\n" + + " └─ TableAlias(a1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:9!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(a1.name) as writer_pseudo_name, min(t.title) as movie_title]\n" + @@ -33014,29 +31805,28 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id role_id]\n" + - " │ └─ TableAlias(a1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id role_id]\n" + + " └─ TableAlias(a1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(a1.name) as writer_pseudo_name, min(t.title) as movie_title]\n" + @@ -33064,29 +31854,28 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id role_id]\n" + - " │ └─ TableAlias(a1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id role_id]\n" + + " └─ TableAlias(a1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -33115,12 +31904,12 @@ WHERE cn.country_code ='[us]' ExpectedPlan: "Project\n" + " ├─ columns: [min(an1.name):0!null->costume_designer_pseudo:0, min(t.title):1!null->movie_with_costumes:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an1.name:11!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an1.name:13!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:8!null\n" + + " │ │ ├─ ci.movie_id:10!null\n" + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + @@ -33132,7 +31921,7 @@ WHERE cn.country_code ='[us]' " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ci.role_id:9!null\n" + + " │ ├─ ci.role_id:11!null\n" + " │ └─ rt.id:2!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -33146,53 +31935,54 @@ WHERE cn.country_code ='[us]' " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ an1.person_id:10!null\n" + + " │ │ ├─ an1.person_id:12!null\n" + " │ │ └─ n1.id:4!null\n" + " │ └─ Eq\n" + " │ ├─ n1.id:4!null\n" + - " │ └─ ci.person_id:7!null\n" + + " │ └─ ci.person_id:9!null\n" + " ├─ TableAlias(n1)\n" + " │ └─ ProcessTable\n" + " │ └─ Table\n" + " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:6!null\n" + - " │ └─ cn.id:12!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:8!null\n" + - " │ │ └─ mc.movie_id:5!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id role_id]\n" + - " │ └─ TableAlias(an1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:7!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ │ ├─ mc.company_id:6!null\n" + + " │ │ └─ cn.id:7!null\n" + + " │ └─ Eq\n" + + " │ ├─ ci.movie_id:10!null\n" + + " │ └─ mc.movie_id:5!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id role_id]\n" + + " └─ TableAlias(an1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:9!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an1.name) as costume_designer_pseudo, min(t.title) as movie_with_costumes]\n" + @@ -33220,29 +32010,28 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id role_id]\n" + - " │ └─ TableAlias(an1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id role_id]\n" + + " └─ TableAlias(an1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an1.name) as costume_designer_pseudo, min(t.title) as movie_with_costumes]\n" + @@ -33270,29 +32059,28 @@ WHERE cn.country_code ='[us]' " │ ├─ name: name\n" + " │ └─ columns: [id]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ TableAlias(ci)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: cast_info\n" + - " │ │ └─ columns: [person_id movie_id role_id]\n" + - " │ └─ TableAlias(an1)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((mc.company_id = cn.id) AND (ci.movie_id = mc.movie_id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ TableAlias(ci)\n" + + " │ └─ Table\n" + + " │ ├─ name: cast_info\n" + + " │ └─ columns: [person_id movie_id role_id]\n" + + " └─ TableAlias(an1)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -33334,12 +32122,12 @@ WHERE ci.note IN ('(voice)', ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->alternative_name:0, min(chn.name):1!null->character_name:0, min(t.title):2!null->movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:19!null), MIN(chn.name:17!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:21!null), MIN(chn.name:19!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:12!null\n" + + " │ │ ├─ ci.movie_id:14!null\n" + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + @@ -33359,7 +32147,7 @@ WHERE ci.note IN ('(voice)', " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ci.role_id:15!null\n" + + " │ ├─ ci.role_id:17!null\n" + " │ └─ rt.id:3!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -33374,9 +32162,9 @@ WHERE ci.note IN ('(voice)', " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:5!null\n" + - " │ │ └─ ci.person_id:11!null\n" + + " │ │ └─ ci.person_id:13!null\n" + " │ └─ Eq\n" + - " │ ├─ an.person_id:18!null\n" + + " │ ├─ an.person_id:20!null\n" + " │ └─ n.id:5!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + @@ -33390,62 +32178,63 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:9!null\n" + - " │ └─ cn.id:20!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:12!null\n" + + " │ │ ├─ ci.movie_id:14!null\n" + " │ │ └─ mc.movie_id:8!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ NOT\n" + - " │ │ │ │ └─ mc.note:2 IS NULL\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ └─ mc.note LIKE '%(worldwide)%'\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:16!null\n" + - " │ │ │ └─ ci.person_role_id:13\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:11!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:9!null\n" + + " │ └─ cn.id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ NOT\n" + + " │ │ │ └─ mc.note:2 IS NULL\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(worldwide)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:18!null\n" + + " │ │ └─ ci.person_role_id:15\n" + + " │ ├─ Filter\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:13!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as alternative_name, min(chn.name) as character_name, min(t.title) as movie]\n" + @@ -33477,39 +32266,38 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mc.note IS NULL)) AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note IS NULL)) AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as alternative_name, min(chn.name) as character_name, min(t.title) as movie]\n" + @@ -33541,39 +32329,38 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ ((NOT(mc.note IS NULL)) AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ ((NOT(mc.note IS NULL)) AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -33613,12 +32400,12 @@ WHERE ci.note = '(voice)' ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->alternative_name:0, min(chn.name):1!null->voiced_character:0, min(n.name):2!null->voicing_actress:0, min(t.title):3!null->american_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:19!null), MIN(chn.name:17!null), MIN(n.name:6!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:21!null), MIN(chn.name:19!null), MIN(n.name:6!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:12!null\n" + + " │ │ ├─ ci.movie_id:14!null\n" + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + @@ -33638,7 +32425,7 @@ WHERE ci.note = '(voice)' " │ └─ columns: [id title production_year]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ci.role_id:15!null\n" + + " │ ├─ ci.role_id:17!null\n" + " │ └─ rt.id:3!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -33653,9 +32440,9 @@ WHERE ci.note = '(voice)' " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:5!null\n" + - " │ │ └─ ci.person_id:11!null\n" + + " │ │ └─ ci.person_id:13!null\n" + " │ └─ Eq\n" + - " │ ├─ an.person_id:18!null\n" + + " │ ├─ an.person_id:20!null\n" + " │ └─ n.id:5!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + @@ -33669,61 +32456,62 @@ WHERE ci.note = '(voice)' " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:9!null\n" + - " │ └─ cn.id:20!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:12!null\n" + + " │ │ ├─ ci.movie_id:14!null\n" + " │ │ └─ mc.movie_id:8!null\n" + - " │ ├─ Filter\n" + - " │ │ ├─ AND\n" + - " │ │ │ ├─ mc.note LIKE '%(200%)%'\n" + - " │ │ │ └─ Or\n" + - " │ │ │ ├─ mc.note LIKE '%(USA)%'\n" + - " │ │ │ └─ mc.note LIKE '%(worldwide)%'\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:16!null\n" + - " │ │ │ └─ ci.person_role_id:13\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ Eq\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ (voice) (longtext)\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:11!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:9!null\n" + + " │ └─ cn.id:11!null\n" + + " ├─ Filter\n" + + " │ ├─ AND\n" + + " │ │ ├─ mc.note LIKE '%(200%)%'\n" + + " │ │ └─ Or\n" + + " │ │ ├─ mc.note LIKE '%(USA)%'\n" + + " │ │ └─ mc.note LIKE '%(worldwide)%'\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:18!null\n" + + " │ │ └─ ci.person_role_id:15\n" + + " │ ├─ Filter\n" + + " │ │ ├─ Eq\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ (voice) (longtext)\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:13!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as alternative_name, min(chn.name) as voiced_character, min(n.name) as voicing_actress, min(t.title) as american_movie]\n" + @@ -33755,39 +32543,38 @@ WHERE ci.note = '(voice)' " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mc.note LIKE '%(200%)%' AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note = '(voice)')\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(200%)%' AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note = '(voice)')\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as alternative_name, min(chn.name) as voiced_character, min(n.name) as voicing_actress, min(t.title) as american_movie]\n" + @@ -33819,39 +32606,38 @@ WHERE ci.note = '(voice)' " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ Filter\n" + - " │ │ ├─ (mc.note LIKE '%(200%)%' AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + - " │ │ └─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id note]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note = '(voice)')\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (mc.company_id = cn.id))\n" + + " ├─ Filter\n" + + " │ ├─ (mc.note LIKE '%(200%)%' AND (mc.note LIKE '%(USA)%' OR mc.note LIKE '%(worldwide)%'))\n" + + " │ └─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id note]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note = '(voice)')\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -33890,12 +32676,12 @@ WHERE ci.note IN ('(voice)', ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->alternative_name:0, min(chn.name):1!null->voiced_character_name:0, min(n.name):2!null->voicing_actress:0, min(t.title):3!null->american_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:17!null), MIN(chn.name:15!null), MIN(n.name:5!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:19!null), MIN(chn.name:17!null), MIN(n.name:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + + " │ │ ├─ ci.movie_id:12!null\n" + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + @@ -33907,7 +32693,7 @@ WHERE ci.note IN ('(voice)', " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ci.role_id:13!null\n" + + " │ ├─ ci.role_id:15!null\n" + " │ └─ rt.id:2!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -33922,9 +32708,9 @@ WHERE ci.note IN ('(voice)', " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:4!null\n" + - " │ │ └─ ci.person_id:9!null\n" + + " │ │ └─ ci.person_id:11!null\n" + " │ └─ Eq\n" + - " │ ├─ an.person_id:16!null\n" + + " │ ├─ an.person_id:18!null\n" + " │ └─ n.id:4!null\n" + " ├─ Filter\n" + " │ ├─ AND\n" + @@ -33938,55 +32724,56 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:8!null\n" + - " │ └─ cn.id:18!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + + " │ │ ├─ ci.movie_id:12!null\n" + " │ │ └─ mc.movie_id:7!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:14!null\n" + - " │ │ │ └─ ci.person_role_id:11\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:9!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:8!null\n" + + " │ └─ cn.id:9!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:16!null\n" + + " │ │ └─ ci.person_role_id:13\n" + + " │ ├─ Filter\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:11!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as alternative_name, min(chn.name) as voiced_character_name, min(n.name) as voicing_actress, min(t.title) as american_movie]\n" + @@ -34016,37 +32803,36 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (mc.company_id = cn.id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as alternative_name, min(chn.name) as voiced_character_name, min(n.name) as voicing_actress, min(t.title) as american_movie]\n" + @@ -34076,37 +32862,36 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (mc.company_id = cn.id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, { @@ -34144,12 +32929,12 @@ WHERE ci.note IN ('(voice)', ExpectedPlan: "Project\n" + " ├─ columns: [min(an.name):0!null->alternative_name:0, min(chn.name):1!null->voiced_char_name:0, min(n.name):2!null->voicing_actress:0, min(t.title):3!null->american_movie:0]\n" + " └─ GroupBy\n" + - " ├─ select: MIN(an.name:17!null), MIN(chn.name:15!null), MIN(n.name:5!null), MIN(t.title:1!null)\n" + + " ├─ select: MIN(an.name:19!null), MIN(chn.name:17!null), MIN(n.name:5!null), MIN(t.title:1!null)\n" + " ├─ group: \n" + " └─ InnerJoin\n" + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + + " │ │ ├─ ci.movie_id:12!null\n" + " │ │ └─ t.id:0!null\n" + " │ └─ Eq\n" + " │ ├─ t.id:0!null\n" + @@ -34161,7 +32946,7 @@ WHERE ci.note IN ('(voice)', " │ └─ columns: [id title]\n" + " └─ InnerJoin\n" + " ├─ Eq\n" + - " │ ├─ ci.role_id:13!null\n" + + " │ ├─ ci.role_id:15!null\n" + " │ └─ rt.id:2!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -34176,9 +32961,9 @@ WHERE ci.note IN ('(voice)', " ├─ AND\n" + " │ ├─ Eq\n" + " │ │ ├─ n.id:4!null\n" + - " │ │ └─ ci.person_id:9!null\n" + + " │ │ └─ ci.person_id:11!null\n" + " │ └─ Eq\n" + - " │ ├─ an.person_id:16!null\n" + + " │ ├─ an.person_id:18!null\n" + " │ └─ n.id:4!null\n" + " ├─ Filter\n" + " │ ├─ Eq\n" + @@ -34190,55 +32975,56 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ Eq\n" + - " │ ├─ mc.company_id:8!null\n" + - " │ └─ cn.id:18!null\n" + - " ├─ InnerJoin\n" + + " ├─ AND\n" + " │ ├─ Eq\n" + - " │ │ ├─ ci.movie_id:10!null\n" + + " │ │ ├─ ci.movie_id:12!null\n" + " │ │ └─ mc.movie_id:7!null\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ Eq\n" + - " │ │ │ ├─ chn.id:14!null\n" + - " │ │ │ └─ ci.person_role_id:11\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ HashIn\n" + - " │ │ │ │ ├─ ci.note:3\n" + - " │ │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ ProcessTable\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ ProcessTable\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ keys: [ci.person_id:9!null]\n" + - " │ ├─ colSet: (1-8)\n" + - " │ ├─ tableId: 1\n" + - " │ └─ Table\n" + - " │ ├─ name: aka_name\n" + - " │ └─ columns: [person_id name]\n" + - " └─ Filter\n" + - " ├─ Eq\n" + - " │ ├─ cn.country_code:1\n" + - " │ └─ [us] (longtext)\n" + - " └─ TableAlias(cn)\n" + - " └─ ProcessTable\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " │ └─ Eq\n" + + " │ ├─ mc.company_id:8!null\n" + + " │ └─ cn.id:9!null\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ Eq\n" + + " │ │ ├─ cn.country_code:1\n" + + " │ │ └─ [us] (longtext)\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ Eq\n" + + " │ │ ├─ chn.id:16!null\n" + + " │ │ └─ ci.person_role_id:13\n" + + " │ ├─ Filter\n" + + " │ │ ├─ HashIn\n" + + " │ │ │ ├─ ci.note:3\n" + + " │ │ │ └─ TUPLE((voice) (longtext), (voice: Japanese version) (longtext), (voice) (uncredited) (longtext), (voice: English version) (longtext))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ ProcessTable\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ ProcessTable\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ keys: [ci.person_id:11!null]\n" + + " ├─ colSet: (1-8)\n" + + " ├─ tableId: 1\n" + + " └─ Table\n" + + " ├─ name: aka_name\n" + + " └─ columns: [person_id name]\n" + "", ExpectedEstimates: "Project\n" + " ├─ columns: [min(an.name) as alternative_name, min(chn.name) as voiced_char_name, min(n.name) as voicing_actress, min(t.title) as american_movie]\n" + @@ -34268,37 +33054,36 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (mc.company_id = cn.id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", ExpectedAnalysis: "Project\n" + " ├─ columns: [min(an.name) as alternative_name, min(chn.name) as voiced_char_name, min(n.name) as voicing_actress, min(t.title) as american_movie]\n" + @@ -34328,37 +33113,36 @@ WHERE ci.note IN ('(voice)', " │ ├─ name: name\n" + " │ └─ columns: [id name gender]\n" + " └─ InnerJoin\n" + - " ├─ (mc.company_id = cn.id)\n" + - " ├─ InnerJoin\n" + - " │ ├─ (ci.movie_id = mc.movie_id)\n" + - " │ ├─ TableAlias(mc)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: movie_companies\n" + - " │ │ └─ columns: [movie_id company_id]\n" + - " │ └─ LookupJoin\n" + - " │ ├─ InnerJoin\n" + - " │ │ ├─ (chn.id = ci.person_role_id)\n" + - " │ │ ├─ Filter\n" + - " │ │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + - " │ │ │ └─ TableAlias(ci)\n" + - " │ │ │ └─ Table\n" + - " │ │ │ ├─ name: cast_info\n" + - " │ │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + - " │ │ └─ TableAlias(chn)\n" + - " │ │ └─ Table\n" + - " │ │ ├─ name: char_name\n" + - " │ │ └─ columns: [id name]\n" + - " │ └─ TableAlias(an)\n" + - " │ └─ IndexedTableAccess(aka_name)\n" + - " │ ├─ index: [aka_name.person_id]\n" + - " │ ├─ columns: [person_id name]\n" + - " │ └─ keys: ci.person_id\n" + - " └─ Filter\n" + - " ├─ (cn.country_code = '[us]')\n" + - " └─ TableAlias(cn)\n" + - " └─ Table\n" + - " ├─ name: company_name\n" + - " └─ columns: [id country_code]\n" + + " ├─ ((ci.movie_id = mc.movie_id) AND (mc.company_id = cn.id))\n" + + " ├─ TableAlias(mc)\n" + + " │ └─ Table\n" + + " │ ├─ name: movie_companies\n" + + " │ └─ columns: [movie_id company_id]\n" + + " └─ CrossJoin\n" + + " ├─ Filter\n" + + " │ ├─ (cn.country_code = '[us]')\n" + + " │ └─ TableAlias(cn)\n" + + " │ └─ Table\n" + + " │ ├─ name: company_name\n" + + " │ └─ columns: [id country_code]\n" + + " └─ LookupJoin\n" + + " ├─ InnerJoin\n" + + " │ ├─ (chn.id = ci.person_role_id)\n" + + " │ ├─ Filter\n" + + " │ │ ├─ (ci.note HASH IN ('(voice)', '(voice: Japanese version)', '(voice) (uncredited)', '(voice: English version)'))\n" + + " │ │ └─ TableAlias(ci)\n" + + " │ │ └─ Table\n" + + " │ │ ├─ name: cast_info\n" + + " │ │ └─ columns: [person_id movie_id person_role_id note role_id]\n" + + " │ └─ TableAlias(chn)\n" + + " │ └─ Table\n" + + " │ ├─ name: char_name\n" + + " │ └─ columns: [id name]\n" + + " └─ TableAlias(an)\n" + + " └─ IndexedTableAccess(aka_name)\n" + + " ├─ index: [aka_name.person_id]\n" + + " ├─ columns: [person_id name]\n" + + " └─ keys: ci.person_id\n" + "", }, } diff --git a/enginetest/queries/integration_plans.go b/enginetest/queries/integration_plans.go index 038f4f9549..97cd20f2e9 100644 --- a/enginetest/queries/integration_plans.go +++ b/enginetest/queries/integration_plans.go @@ -3486,7 +3486,7 @@ WHERE ExpectedEstimates: "Distinct\n" + " └─ Project\n" + " ├─ columns: [ufc.id, ufc.T4IBQ, ufc.ZH72S, ufc.AMYXQ, ufc.KTNZ2, ufc.HIID2, ufc.DN3OQ, ufc.VVKNB, ufc.SH7TP, ufc.SRZZO, ufc.QZ6VT]\n" + - " └─ HashJoin (estimated cost=102847291.680 rows=9769906324)\n" + + " └─ HashJoin (estimated cost=102841528.680 rows=9769906324)\n" + " ├─ (nd.ZH72S = ufc.ZH72S)\n" + " ├─ HashJoin (estimated cost=5195054.880 rows=5085844)\n" + " │ ├─ (cla.FTQLQ = ufc.T4IBQ)\n" + @@ -3522,7 +3522,7 @@ WHERE ExpectedAnalysis: "Distinct\n" + " └─ Project\n" + " ├─ columns: [ufc.id, ufc.T4IBQ, ufc.ZH72S, ufc.AMYXQ, ufc.KTNZ2, ufc.HIID2, ufc.DN3OQ, ufc.VVKNB, ufc.SH7TP, ufc.SRZZO, ufc.QZ6VT]\n" + - " └─ HashJoin (estimated cost=102847291.680 rows=9769906324) (actual rows=0 loops=1)\n" + + " └─ HashJoin (estimated cost=102841528.680 rows=9769906324) (actual rows=0 loops=1)\n" + " ├─ (nd.ZH72S = ufc.ZH72S)\n" + " ├─ HashJoin (estimated cost=5195054.880 rows=5085844) (actual rows=0 loops=1)\n" + " │ ├─ (cla.FTQLQ = ufc.T4IBQ)\n" + @@ -3637,7 +3637,7 @@ WHERE ExpectedEstimates: "Distinct\n" + " └─ Project\n" + " ├─ columns: [ufc.id, ufc.T4IBQ, ufc.ZH72S, ufc.AMYXQ, ufc.KTNZ2, ufc.HIID2, ufc.DN3OQ, ufc.VVKNB, ufc.SH7TP, ufc.SRZZO, ufc.QZ6VT]\n" + - " └─ HashJoin (estimated cost=102847291.680 rows=9769906324)\n" + + " └─ HashJoin (estimated cost=102841528.680 rows=9769906324)\n" + " ├─ (nd.ZH72S = ufc.ZH72S)\n" + " ├─ HashJoin (estimated cost=5195054.880 rows=5085844)\n" + " │ ├─ (cla.FTQLQ = ufc.T4IBQ)\n" + @@ -3673,7 +3673,7 @@ WHERE ExpectedAnalysis: "Distinct\n" + " └─ Project\n" + " ├─ columns: [ufc.id, ufc.T4IBQ, ufc.ZH72S, ufc.AMYXQ, ufc.KTNZ2, ufc.HIID2, ufc.DN3OQ, ufc.VVKNB, ufc.SH7TP, ufc.SRZZO, ufc.QZ6VT]\n" + - " └─ HashJoin (estimated cost=102847291.680 rows=9769906324) (actual rows=0 loops=1)\n" + + " └─ HashJoin (estimated cost=102841528.680 rows=9769906324) (actual rows=0 loops=1)\n" + " ├─ (nd.ZH72S = ufc.ZH72S)\n" + " ├─ HashJoin (estimated cost=5195054.880 rows=5085844) (actual rows=0 loops=1)\n" + " │ ├─ (cla.FTQLQ = ufc.T4IBQ)\n" + @@ -4321,7 +4321,7 @@ WHERE "", ExpectedEstimates: "Project\n" + " ├─ columns: [umf.id, umf.T4IBQ, umf.FGG57, umf.SSHPJ, umf.NLA6O, umf.SFJ6L, umf.TJPT7, umf.ARN5P, umf.SYPKF, umf.IVFMK, umf.IDE43, umf.AZ6SP, umf.FSDY2, umf.XOSD4, umf.HMW4H, umf.S76OM, umf.vaf, umf.ZROH6, umf.QCGTS, umf.LNFM6, umf.TVAWL, umf.HDLCL, umf.BHHW6, umf.FHCYT, umf.QZ6VT]\n" + - " └─ HashJoin (estimated cost=566371.320 rows=543966)\n" + + " └─ HashJoin (estimated cost=560608.320 rows=543966)\n" + " ├─ (nd.FGG57 = umf.FGG57)\n" + " ├─ HashJoin (estimated cost=562339.320 rows=543966)\n" + " │ ├─ (cla.FTQLQ = umf.T4IBQ)\n" + @@ -4358,7 +4358,7 @@ WHERE "", ExpectedAnalysis: "Project\n" + " ├─ columns: [umf.id, umf.T4IBQ, umf.FGG57, umf.SSHPJ, umf.NLA6O, umf.SFJ6L, umf.TJPT7, umf.ARN5P, umf.SYPKF, umf.IVFMK, umf.IDE43, umf.AZ6SP, umf.FSDY2, umf.XOSD4, umf.HMW4H, umf.S76OM, umf.vaf, umf.ZROH6, umf.QCGTS, umf.LNFM6, umf.TVAWL, umf.HDLCL, umf.BHHW6, umf.FHCYT, umf.QZ6VT]\n" + - " └─ HashJoin (estimated cost=566371.320 rows=543966) (actual rows=0 loops=1)\n" + + " └─ HashJoin (estimated cost=560608.320 rows=543966) (actual rows=0 loops=1)\n" + " ├─ (nd.FGG57 = umf.FGG57)\n" + " ├─ HashJoin (estimated cost=562339.320 rows=543966) (actual rows=0 loops=1)\n" + " │ ├─ (cla.FTQLQ = umf.T4IBQ)\n" + diff --git a/sql/memo/coster.go b/sql/memo/coster.go index 3e8e26f6a7..674b2f6654 100644 --- a/sql/memo/coster.go +++ b/sql/memo/coster.go @@ -99,7 +99,7 @@ func (c *coster) costRel(ctx *sql.Context, n RelExpr, s sql.StatsProvider) (floa cost := lBest * (rBest / 2.0) * (seqIOCostFactor + cpuCostFactor) return cost * .5, nil } - return lBest*(seqIOCostFactor+cpuCostFactor) + float64(rTableScan)*(seqIOCostFactor+memCostFactor) + selfJoinCard*cpuCostFactor, nil + return lBest*(seqIOCostFactor+cpuCostFactor) + float64(rBest)*(seqIOCostFactor+memCostFactor) + selfJoinCard*cpuCostFactor, nil case jp.Op.IsLateral(): return (lBest*rBest-1)*seqIOCostFactor + (lBest*rBest)*cpuCostFactor, nil From 59fec641f5c8163d21f93473ac8534ed8109c2ad Mon Sep 17 00:00:00 2001 From: Max Hoffman Date: Wed, 19 Mar 2025 16:22:58 -0700 Subject: [PATCH 2/2] jason's comments --- sql/memo/coster.go | 1 - 1 file changed, 1 deletion(-) diff --git a/sql/memo/coster.go b/sql/memo/coster.go index 674b2f6654..a313f6aa00 100644 --- a/sql/memo/coster.go +++ b/sql/memo/coster.go @@ -94,7 +94,6 @@ func (c *coster) costRel(ctx *sql.Context, n RelExpr, s sql.StatsProvider) (floa case jp.Op.IsDegenerate(): return ((lBest*rBest)*seqIOCostFactor + (lBest*rBest)*cpuCostFactor) * degeneratePenalty, nil case jp.Op.IsHash(): - // TODO hash has to load whole table into memory, really bad for big right sides if jp.Op.IsPartial() { cost := lBest * (rBest / 2.0) * (seqIOCostFactor + cpuCostFactor) return cost * .5, nil