diff --git a/benches/engine.rs b/benches/engine.rs index b4ea51dc6b3d89c7419f77bc6f315811fd037d9c..99aaa109cce9d51d2f8f786f6ea0ee0b4f7d6909 100644 --- a/benches/engine.rs +++ b/benches/engine.rs @@ -422,6 +422,10 @@ impl Coordinator for RouterRuntimeMock { Ok(Box::new(result)) } + fn explain_format(&self, explain: String) -> Result<Box<dyn Any>, QueryPlannerError> { + Ok(Box::new(explain)) + } + fn extract_sharding_keys_from_map<'engine, 'rec>( &'engine self, space: String, diff --git a/cartridge/roles/sbroad-router.lua b/cartridge/roles/sbroad-router.lua index 6f0b62ba843823f2cf24f9500f983dc515e57fb4..6f9956a34c3a9df0691567f3557b8f74e97e90e7 100644 --- a/cartridge/roles/sbroad-router.lua +++ b/cartridge/roles/sbroad-router.lua @@ -7,7 +7,6 @@ local function init(opts) -- luacheck: no unused args end _G.sbroad.calculate_bucket_id = sbroad_router.calculate_bucket_id - _G.sbroad.explain = sbroad_router.explain _G.sbroad.execute = sbroad_router.execute _G.sbroad.trace = sbroad_router.trace diff --git a/src/api.rs b/src/api.rs index 4ded46305aa211b94c8903a188447fce02776e6e..c22ec750985f02cf6b8a49cc033703697fcc88b0 100644 --- a/src/api.rs +++ b/src/api.rs @@ -7,6 +7,5 @@ thread_local!(static SEGMENT_ENGINE: RefCell<StorageRuntime> = RefCell::new(Stor pub mod calculate_bucket_id; pub mod exec_query; -pub mod explain; mod helper; pub mod invalidate_cached_schema; diff --git a/src/api/explain.rs b/src/api/explain.rs deleted file mode 100644 index 67b9966e0b8a41342efb13a59f28c23187aed799..0000000000000000000000000000000000000000 --- a/src/api/explain.rs +++ /dev/null @@ -1,68 +0,0 @@ -use std::os::raw::c_int; - -use serde::{Deserialize, Serialize}; -use tarantool::tuple::{FunctionArgs, FunctionCtx, Tuple}; - -use crate::api::helper::load_config; -use crate::api::COORDINATOR_ENGINE; -use crate::error; -use crate::errors::QueryPlannerError; -use crate::executor::Query; -use crate::log::tarantool_error; - -#[derive(Serialize, Deserialize)] -/// Lua function params -struct Args { - /// Target sql query - query: String, -} - -impl TryFrom<FunctionArgs> for Args { - type Error = QueryPlannerError; - - fn try_from(value: FunctionArgs) -> Result<Self, Self::Error> { - Tuple::from(value) - .decode::<Args>() - .map_err(|e| QueryPlannerError::CustomError(format!("Parsing args error: {:?}", e))) - } -} - -/// Print query explain. -#[no_mangle] -pub extern "C" fn explain(ctx: FunctionCtx, args: FunctionArgs) -> c_int { - let lua_params = match Args::try_from(args) { - Ok(param) => param, - Err(e) => return tarantool_error(&e.to_string()), - }; - - let ret_code = load_config(&COORDINATOR_ENGINE); - if ret_code != 0 { - return ret_code; - } - COORDINATOR_ENGINE.with(|engine| { - let runtime = match engine.try_borrow() { - Ok(runtime) => runtime, - Err(e) => { - return tarantool_error(&format!( - "Failed to borrow runtime while explaining the query: {}", - e - )); - } - }; - let query = match Query::new(&*runtime, &lua_params.query, vec![]) { - Ok(q) => q, - Err(e) => { - error!(Option::from("explain"), &format!("{:?}", e)); - return tarantool_error(&e.to_string()); - } - }; - - match query.explain() { - Ok(q) => { - ctx.return_mp(&q).unwrap(); - 0 - } - Err(e) => tarantool_error(&e.to_string()), - } - }) -} diff --git a/src/executor.rs b/src/executor.rs index 9b42c88cc2519d182de00de3fc295ef8545f0bd8..14a455179bf9f8d4bab5406d523ccd25b8961ca9 100644 --- a/src/executor.rs +++ b/src/executor.rs @@ -72,6 +72,8 @@ pub struct Query<'a, C> where C: Coordinator, { + /// Explain flag + is_explain: bool, /// Execution plan exec_plan: ExecutionPlan, /// Coordinator runtime @@ -117,6 +119,7 @@ where plan.bind_params(params)?; plan.optimize()?; let query = Query { + is_explain: plan.is_expain(), exec_plan: ExecutionPlan::from(plan), coordinator, bucket_map: HashMap::new(), @@ -145,6 +148,10 @@ where /// - Failed to get plan top. #[otm_child_span("query.dispatch")] pub fn dispatch(&mut self) -> Result<Box<dyn Any>, QueryPlannerError> { + if self.is_explain() { + return self.coordinator.explain_format(self.to_explain()?); + } + let slices = self.exec_plan.get_ir_plan().clone_slices(); if let Some(slices) = slices { for slice in slices { @@ -281,9 +288,14 @@ where /// /// # Errors /// - Failed to build explain - pub fn explain(&self) -> Result<String, QueryPlannerError> { + pub fn to_explain(&self) -> Result<String, QueryPlannerError> { self.exec_plan.get_ir_plan().as_explain() } + + /// Checks that query is explain and have not to be executed + fn is_explain(&self) -> bool { + self.is_explain + } } #[cfg(test)] diff --git a/src/executor/engine.rs b/src/executor/engine.rs index eb2f5e4a55eb5f512d2505bb8a8eb9bba5bedc46..8b4c8ce113d138c8fefb4a243893ebec3084450c 100644 --- a/src/executor/engine.rs +++ b/src/executor/engine.rs @@ -117,6 +117,12 @@ pub trait Coordinator: Configuration { buckets: &Buckets, ) -> Result<Box<dyn Any>, QueryPlannerError>; + /// Setup output format of query explain + /// + /// # Errors + /// - internal executor errors + fn explain_format(&self, explain: String) -> Result<Box<dyn Any>, QueryPlannerError>; + /// Extract a list of the sharding keys from a map for the given space. /// /// # Errors diff --git a/src/executor/engine/cartridge/router.rs b/src/executor/engine/cartridge/router.rs index 96afa0657572270a116f3074cde0e5d845ec3418..a142b0b442052ba9ccfcda6adf44fa28d5b36104 100644 --- a/src/executor/engine/cartridge/router.rs +++ b/src/executor/engine/cartridge/router.rs @@ -232,6 +232,18 @@ impl Coordinator for RouterRuntime { self.exec_on_all(&pattern_with_params, is_data_modifier) } + fn explain_format(&self, explain: String) -> Result<Box<dyn Any>, QueryPlannerError> { + let e = explain.lines().collect::<Vec<&str>>(); + + match Tuple::new(&vec![e]) { + Ok(t) => Ok(Box::new(t)), + Err(e) => Err(QueryPlannerError::CustomError(format!( + "Tuple creation error: {}", + e + ))), + } + } + /// Transform sub query results into a virtual table. #[otm_child_span("query.motion.materialize")] fn materialize_motion( diff --git a/src/executor/engine/mock.rs b/src/executor/engine/mock.rs index dbbdc6e8b49cd5394c35b11b6505fb62fb3ba25d..54014e48b51fcd6825e86d5443faa7b76d6f577b 100644 --- a/src/executor/engine/mock.rs +++ b/src/executor/engine/mock.rs @@ -300,6 +300,10 @@ impl Coordinator for RouterRuntimeMock { Ok(Box::new(result)) } + fn explain_format(&self, explain: String) -> Result<Box<dyn Any>, QueryPlannerError> { + Ok(Box::new(explain)) + } + fn extract_sharding_keys_from_map<'engine, 'rec>( &'engine self, space: String, diff --git a/src/executor/tests/frontend.rs b/src/executor/tests/frontend.rs index 2c7242bc16a733034fbbdc4aea42787bd85d67da..9fd5f9c1c5b2e316824705b12114ca62a9cacd1f 100644 --- a/src/executor/tests/frontend.rs +++ b/src/executor/tests/frontend.rs @@ -70,3 +70,48 @@ fn front_invalid_sql4() { plan_err ); } + +#[test] +fn front_explain_select_sql1() { + let sql = r#"EXPLAIN SELECT "t"."identification_number" as "c1", "product_code" FROM "hash_testing" as "t""#; + + let metadata = &RouterRuntimeMock::new(); + let mut query = Query::new(metadata, sql, vec![]).unwrap(); + + let expected_explain = String::from( + r#"projection ("t"."identification_number" -> "c1", "t"."product_code" -> "product_code") + scan "hash_testing" -> "t" +"#, + ); + + if let Ok(actual_explain) = query.dispatch().unwrap().downcast::<String>() { + assert_eq!(expected_explain, *actual_explain); + } else { + panic!("Explain must be string") + } +} + +#[test] +fn front_explain_select_sql2() { + let sql = r#"EXPLAIN SELECT "t"."identification_number" as "c1", "product_code" FROM "hash_testing" as "t" + UNION ALL + SELECT "t2"."identification_number", "product_code" FROM "hash_testing_hist" as "t2""#; + + let metadata = &RouterRuntimeMock::new(); + let mut query = Query::new(metadata, sql, vec![]).unwrap(); + + let expected_explain = format!( + "{}\n{}\n{}\n{}\n{}\n", + r#"union all"#, + r#" projection ("t"."identification_number" -> "c1", "t"."product_code" -> "product_code")"#, + r#" scan "hash_testing" -> "t""#, + r#" projection ("t2"."identification_number" -> "identification_number", "t2"."product_code" -> "product_code")"#, + r#" scan "hash_testing_hist" -> "t2""#, + ); + + if let Ok(actual_explain) = query.dispatch().unwrap().downcast::<String>() { + assert_eq!(expected_explain, *actual_explain); + } else { + panic!("Explain must be string") + } +} diff --git a/src/frontend/sql.rs b/src/frontend/sql.rs index 35a310a630ebd5420695c26f969b57406b98a124..9b1f2848e7f801c84aa0eefc115d6159017c4864 100644 --- a/src/frontend/sql.rs +++ b/src/frontend/sql.rs @@ -729,6 +729,14 @@ impl Ast for AbstractSyntaxTree { }; map.add(*id, plan_insert_id); } + Type::Explain => { + plan.mark_as_explain(); + + let ast_child_id = node.children.first().ok_or_else(|| { + QueryPlannerError::CustomError("Explain has no children.".into()) + })?; + map.add(0, map.get(*ast_child_id)?); + } Type::AliasName | Type::ColumnName | Type::ScanName diff --git a/src/frontend/sql/ast.rs b/src/frontend/sql/ast.rs index c25ddb70c38beb551f72a8b4422078152304c487..573464d87d587409dcc40477161a25135bc2dd7e 100644 --- a/src/frontend/sql/ast.rs +++ b/src/frontend/sql/ast.rs @@ -36,6 +36,7 @@ pub enum Type { Double, Eq, Except, + Explain, False, Gt, GtEq, @@ -91,6 +92,7 @@ impl Type { Rule::Double => Ok(Type::Double), Rule::Eq => Ok(Type::Eq), Rule::Except => Ok(Type::Except), + Rule::Explain => Ok(Type::Explain), Rule::False => Ok(Type::False), Rule::Gt => Ok(Type::Gt), Rule::GtEq => Ok(Type::GtEq), diff --git a/src/frontend/sql/ir.rs b/src/frontend/sql/ir.rs index 2456a5128f3140571ee3fa7e31cdf51776d0d240..4d943ecf3133b512695aeebfa0b6c554b069da87 100644 --- a/src/frontend/sql/ir.rs +++ b/src/frontend/sql/ir.rs @@ -111,9 +111,10 @@ impl Translation { pub(super) fn get(&self, old: usize) -> Result<usize, QueryPlannerError> { self.map.get(&old).copied().ok_or_else(|| { - QueryPlannerError::CustomError( - "Could not find parse node in translation map".to_string(), - ) + QueryPlannerError::CustomError(format!( + "Could not find parse node [{}] in translation map", + old + )) }) } } diff --git a/src/frontend/sql/query.pest b/src/frontend/sql/query.pest index cd74e2ed33699a0bcf013f8a0e0e0b7df4aaba4a..49658ad558cb37e7a5ce10ba63f9767b56e06627 100644 --- a/src/frontend/sql/query.pest +++ b/src/frontend/sql/query.pest @@ -1,4 +1,7 @@ -Command = _{ SOI ~ Query ~ EOF } +Command = _{ SOI ~ (ExplainQuery | Query) ~ EOF } + +ExplainQuery = _{ Explain } + Explain = { ^"explain" ~ Query } Query = _{ Except | UnionAll | Select | Values | Insert } Select = { diff --git a/src/ir.rs b/src/ir.rs index b7686b147f8c244489d4ad768cc5fc521d403cae..b77a02c444aa29094e69fff4be2b9b163e55cd17 100644 --- a/src/ir.rs +++ b/src/ir.rs @@ -107,6 +107,9 @@ pub struct Plan { /// We build the plan tree in a bottom-up manner, so the top would /// be added last. The plan without a top should be treated as invalid. top: Option<usize>, + /// The flag is enabled if user wants to get a query plan only. + /// In this case we don't need to execute query + is_explain: bool, } impl Default for Plan { @@ -160,6 +163,7 @@ impl Plan { relations: None, slices: None, top: None, + is_explain: false, } } @@ -312,6 +316,17 @@ impl Plan { param_set } + /// Marks plan as query explain + pub fn mark_as_explain(&mut self) { + self.is_explain = true; + } + + /// Checks that plan is explain query + #[must_use] + pub fn is_expain(&self) -> bool { + self.is_explain + } + /// Set top node of plan /// # Errors /// - top node doesn't exist in the plan. diff --git a/src/router.lua b/src/router.lua index ac5f414e650d9afc62a6feba6994afb0c5a83b1c..8bf48746d6ed329b9979e1d5afcca1a05d000c26 100644 --- a/src/router.lua +++ b/src/router.lua @@ -217,11 +217,6 @@ local function init() 'libsbroad.dispatch_query', { if_not_exists = true, language = 'C' } ) - - box.schema.func.create( - 'libsbroad.explain', - { if_not_exists = true, language = 'C' } - ) end local function calculate_bucket_id(values, space_name) -- luacheck: no unused args @@ -252,26 +247,6 @@ local function calculate_bucket_id(values, space_name) -- luacheck: no unused ar return result end - -local function explain(query) - local has_err, res = pcall( - function() - return box.func["libsbroad.explain"]:call({ query }) - end - ) - - if has_err == false then - return nil, res - end - - local res_lines = {} - for line in res:gmatch("[^\r\n]+") do - table.insert(res_lines, line) - end - - return res_lines, nil -end - local function invalidate_cache () box.func["libsbroad.invalidate_coordinator_cache"]:call({}) end @@ -295,7 +270,6 @@ local function execute(query, params) end return { - explain = explain, init=init, invalidate_cache = invalidate_cache, execute = execute, diff --git a/test_app/test/integration/api_test.lua b/test_app/test/integration/api_test.lua index 2b65b9e839506cbe850231be01c29a4bfdce8e49..5e724b2623ce3890fc39a0b87e7ae0b382706cfd 100644 --- a/test_app/test/integration/api_test.lua +++ b/test_app/test/integration/api_test.lua @@ -780,8 +780,8 @@ end g.test_motion_explain = function() local api = cluster:server("api-1").net_box - local r, err = api:call("sbroad.explain", { [[SELECT "id", "name" FROM "testing_space" - WHERE "id" in (SELECT "id" FROM "space_simple_shard_key_hist" WHERE "sysOp" < 0)]] }) + local r, err = api:call("sbroad.execute", { [[EXPLAIN SELECT "id", "name" FROM "testing_space" + WHERE "id" in (SELECT "id" FROM "space_simple_shard_key_hist" WHERE "sysOp" < 0)]], {} }) t.assert_equals(err, nil) t.assert_equals( r, @@ -802,7 +802,7 @@ end g.test_join_explain = function() local api = cluster:server("api-1").net_box - local r, err = api:call("sbroad.explain", { [[SELECT * + local r, err = api:call("sbroad.execute", { [[EXPLAIN SELECT * FROM (SELECT "id", "name" FROM "space_simple_shard_key" WHERE "sysOp" < 1 UNION ALL @@ -810,7 +810,7 @@ FROM INNER JOIN (SELECT "id" as "tid" FROM "testing_space" where "id" <> 1) AS "t8" ON "t3"."id" = "t8"."tid" -WHERE "t3"."name" = '123']] }) +WHERE "t3"."name" = '123']], {} }) t.assert_equals(err, nil) t.assert_equals( r, @@ -839,12 +839,12 @@ end g.test_valid_explain = function() local api = cluster:server("api-1").net_box - local r, err = api:call("sbroad.explain", { [[SELECT * FROM ( + local r, err = api:call("sbroad.execute", { [[EXPLAIN SELECT * FROM ( SELECT "id", "name" FROM "space_simple_shard_key" WHERE "sysOp" < 0 UNION ALL SELECT "id", "name" FROM "space_simple_shard_key_hist" WHERE "sysOp" > 0 ) as "t1" - WHERE "id" = 1 ]] }) + WHERE "id" = 1]], {} }) t.assert_equals(err, nil) t.assert_equals( diff --git a/tests/artifactory/backend/sql/tree/sql_order_selection.yaml b/tests/artifactory/backend/sql/tree/sql_order_selection.yaml index b665225106605ff2ce6e0adaa270a927db2bd34e..19a2aa7daeef5e5f459f520980b57febe9a0e67e 100644 --- a/tests/artifactory/backend/sql/tree/sql_order_selection.yaml +++ b/tests/artifactory/backend/sql/tree/sql_order_selection.yaml @@ -112,3 +112,4 @@ relations: name: t slices: ~ top: 16 +is_explain: false diff --git a/tests/artifactory/ir/distribution/join_unite_keys.yaml b/tests/artifactory/ir/distribution/join_unite_keys.yaml index b92f37b347fa353b3470fd9223808b91bb76fbd6..b1ac3d0077e06e447beb9e9321be7d4808625275 100644 --- a/tests/artifactory/ir/distribution/join_unite_keys.yaml +++ b/tests/artifactory/ir/distribution/join_unite_keys.yaml @@ -170,3 +170,4 @@ relations: name: t1 slices: ~ top: 28 +is_explain: false diff --git a/tests/artifactory/ir/distribution/shrink_dist_key_1.yaml b/tests/artifactory/ir/distribution/shrink_dist_key_1.yaml index 56f61733d9cf3afe2fab351b1b154a52914199b7..0646bb3bf3b0e7ae4461aa47063be71e55f424af 100644 --- a/tests/artifactory/ir/distribution/shrink_dist_key_1.yaml +++ b/tests/artifactory/ir/distribution/shrink_dist_key_1.yaml @@ -98,3 +98,4 @@ relations: name: t slices: ~ top: 15 +is_explain: false diff --git a/tests/artifactory/ir/distribution/shrink_dist_key_2.yaml b/tests/artifactory/ir/distribution/shrink_dist_key_2.yaml index d90961f0fe34f3528797ca54be71708da4c10b12..82494146138c4e242088b64d849b7fe0c2a4f3d0 100644 --- a/tests/artifactory/ir/distribution/shrink_dist_key_2.yaml +++ b/tests/artifactory/ir/distribution/shrink_dist_key_2.yaml @@ -87,3 +87,4 @@ relations: name: t slices: ~ top: 13 +is_explain: false diff --git a/tests/artifactory/ir/distribution/shuffle_dist_key.yaml b/tests/artifactory/ir/distribution/shuffle_dist_key.yaml index 0cda2266f7f2bf1361cbc9509718d8822e18c1b4..d2f81b5ca91593638c6e68dec69b5cc479a92d8f 100644 --- a/tests/artifactory/ir/distribution/shuffle_dist_key.yaml +++ b/tests/artifactory/ir/distribution/shuffle_dist_key.yaml @@ -98,3 +98,4 @@ relations: name: t slices: ~ top: 15 +is_explain: false diff --git a/tests/artifactory/ir/distribution/union_fallback_to_random.yaml b/tests/artifactory/ir/distribution/union_fallback_to_random.yaml index ce2668b222861068fa15b04f104004a46fe00100..e10eccccdd87bb494eb81b58493d4c58e4f71e7c 100644 --- a/tests/artifactory/ir/distribution/union_fallback_to_random.yaml +++ b/tests/artifactory/ir/distribution/union_fallback_to_random.yaml @@ -114,3 +114,4 @@ relations: name: t2 slices: ~ top: 17 +is_explain: false diff --git a/tests/artifactory/ir/distribution/union_preserve_dist.yaml b/tests/artifactory/ir/distribution/union_preserve_dist.yaml index aa106e212f3fc182d9d821034cac604ee367f960..60ae5e3b6af972c0226ca3c8a5f8f4670d53df0c 100644 --- a/tests/artifactory/ir/distribution/union_preserve_dist.yaml +++ b/tests/artifactory/ir/distribution/union_preserve_dist.yaml @@ -114,3 +114,4 @@ relations: name: t2 slices: ~ top: 17 +is_explain: false diff --git a/tests/artifactory/ir/operator/join.yaml b/tests/artifactory/ir/operator/join.yaml index b92f37b347fa353b3470fd9223808b91bb76fbd6..b1ac3d0077e06e447beb9e9321be7d4808625275 100644 --- a/tests/artifactory/ir/operator/join.yaml +++ b/tests/artifactory/ir/operator/join.yaml @@ -170,3 +170,4 @@ relations: name: t1 slices: ~ top: 28 +is_explain: false diff --git a/tests/artifactory/ir/operator/projection.yaml b/tests/artifactory/ir/operator/projection.yaml index 03906c635f0fd72a5d24cd815423b891d7f3dc18..965a3d0c2aa87159fd07202d9a62364f74aab784 100644 --- a/tests/artifactory/ir/operator/projection.yaml +++ b/tests/artifactory/ir/operator/projection.yaml @@ -73,3 +73,4 @@ relations: name: t slices: ~ top: 9 +is_explain: false diff --git a/tests/artifactory/ir/operator/scan_rel.yaml b/tests/artifactory/ir/operator/scan_rel.yaml index 110fac5fa21836c7b5458ff7078459308bdd4b37..314dc8b09ff502dffb40b681445ee9107251a692 100644 --- a/tests/artifactory/ir/operator/scan_rel.yaml +++ b/tests/artifactory/ir/operator/scan_rel.yaml @@ -72,3 +72,4 @@ relations: name: t slices: ~ top: 9 +is_explain: false diff --git a/tests/artifactory/ir/operator/selection.yaml b/tests/artifactory/ir/operator/selection.yaml index d831a24cc8504559e88df17eee8c5846186d24c3..dafbec9d8d734b1b626725aece3f48c9c36a4e73 100644 --- a/tests/artifactory/ir/operator/selection.yaml +++ b/tests/artifactory/ir/operator/selection.yaml @@ -148,3 +148,4 @@ relations: name: t slices: ~ top: 23 +is_explain: false diff --git a/tests/artifactory/ir/operator/selection_with_sub_query.yaml b/tests/artifactory/ir/operator/selection_with_sub_query.yaml index 929ed29eedaf48865f24ae7949b8d605a4330c09..323c7fce30f77a469b4c10495a0102a10974d3bd 100644 --- a/tests/artifactory/ir/operator/selection_with_sub_query.yaml +++ b/tests/artifactory/ir/operator/selection_with_sub_query.yaml @@ -149,3 +149,4 @@ relations: name: t2 slices: ~ top: 24 +is_explain: false diff --git a/tests/artifactory/ir/operator/sub_query.yaml b/tests/artifactory/ir/operator/sub_query.yaml index 728a05bfed9f5e6c09d2a30660895e1dcc2b1879..60b9c0588381157959fe24af234ddb8b89d7ff11 100644 --- a/tests/artifactory/ir/operator/sub_query.yaml +++ b/tests/artifactory/ir/operator/sub_query.yaml @@ -81,3 +81,4 @@ relations: name: t slices: ~ top: 11 +is_explain: false diff --git a/tests/artifactory/ir/plan_no_top.yaml b/tests/artifactory/ir/plan_no_top.yaml index 67afa8eac421cf3abbb436f49aa6cecb7a22a06f..bb091a3b4fc9658dc5e9e6f153f9f525c16baf48 100644 --- a/tests/artifactory/ir/plan_no_top.yaml +++ b/tests/artifactory/ir/plan_no_top.yaml @@ -34,3 +34,4 @@ relations: name: t slices: ~ top: ~ +is_explain: false diff --git a/tests/artifactory/ir/plan_oor_top.yaml b/tests/artifactory/ir/plan_oor_top.yaml index 0ffb626f1214cda1c40160115eb98084854aeba9..652b2be063343c5c8f27efe54bf973fa22f8769a 100644 --- a/tests/artifactory/ir/plan_oor_top.yaml +++ b/tests/artifactory/ir/plan_oor_top.yaml @@ -34,3 +34,4 @@ relations: name: t slices: ~ top: 42 +is_explain: false diff --git a/tests/artifactory/ir/transformation/redistribution/full_motion_less_for_sub_query.yaml b/tests/artifactory/ir/transformation/redistribution/full_motion_less_for_sub_query.yaml index d65848c3597bf41282032c8bd5856ff673fc476c..7e7ab85177d06ec372c788ddda6e28355d725bcb 100644 --- a/tests/artifactory/ir/transformation/redistribution/full_motion_less_for_sub_query.yaml +++ b/tests/artifactory/ir/transformation/redistribution/full_motion_less_for_sub_query.yaml @@ -198,3 +198,4 @@ slices: - - 30 top: 26 +is_explain: false diff --git a/tests/artifactory/ir/transformation/redistribution/full_motion_non_segment_outer_for_sub_query.yaml b/tests/artifactory/ir/transformation/redistribution/full_motion_non_segment_outer_for_sub_query.yaml index 68a99daa2d49a467838826a707438b8fab635c7c..ddac69bf957cad7183dcb872d2e96e1e2191a874 100644 --- a/tests/artifactory/ir/transformation/redistribution/full_motion_non_segment_outer_for_sub_query.yaml +++ b/tests/artifactory/ir/transformation/redistribution/full_motion_non_segment_outer_for_sub_query.yaml @@ -217,3 +217,4 @@ slices: - - 32 top: 28 +is_explain: false diff --git a/tests/artifactory/ir/transformation/redistribution/local_sub_query.yaml b/tests/artifactory/ir/transformation/redistribution/local_sub_query.yaml index 9bf9e58f6908f61045e4d5bd63c6064e23330712..c7fda607c315f77c9d62b4b99687da451a6f4de9 100644 --- a/tests/artifactory/ir/transformation/redistribution/local_sub_query.yaml +++ b/tests/artifactory/ir/transformation/redistribution/local_sub_query.yaml @@ -174,3 +174,4 @@ relations: name: t2 slices: ~ top: 24 +is_explain: false diff --git a/tests/artifactory/ir/transformation/redistribution/multiple_sub_queries.yaml b/tests/artifactory/ir/transformation/redistribution/multiple_sub_queries.yaml index 712c409c6d94349a4c2bc858d9f89003862e9a59..138593e3ab48c82b3034a71f736e78d4d36ec3c1 100644 --- a/tests/artifactory/ir/transformation/redistribution/multiple_sub_queries.yaml +++ b/tests/artifactory/ir/transformation/redistribution/multiple_sub_queries.yaml @@ -346,3 +346,4 @@ slices: - - 50 - 54 top: 46 +is_explain: false diff --git a/tests/artifactory/ir/transformation/redistribution/segment_motion_for_sub_query.yaml b/tests/artifactory/ir/transformation/redistribution/segment_motion_for_sub_query.yaml index 5be1c36c5b406804152a4bb5346827a203aeafca..bd8470931001d8df6445cf90379759c89869deb7 100644 --- a/tests/artifactory/ir/transformation/redistribution/segment_motion_for_sub_query.yaml +++ b/tests/artifactory/ir/transformation/redistribution/segment_motion_for_sub_query.yaml @@ -205,3 +205,4 @@ slices: - - 30 top: 26 +is_explain: false