diff --git a/src/query.rs b/src/query.rs index 4290fa2b5900a8c77814ec7e17755da0e6c737ed..33c291ad06c31eb81ba2d1bde3e5f1928d54160f 100644 --- a/src/query.rs +++ b/src/query.rs @@ -518,6 +518,38 @@ mod tests { assert_eq!(q.transform().unwrap(), expected_result) } + #[test] + fn test_transform_complex_in_ext_cond() { + let test_query = "SELECT * FROM ( + SELECT * FROM \"complex_idx_test\" WHERE \"sys_from\" <= 0 AND \"sys_to\" >= 0 + UNION ALL + SELECT * FROM \"complex_idx_test\" WHERE \"sys_from\" <= 0 + ) AS \"t3\" + WHERE (\"identification_number\" = 1 OR (\"identification_number\" = 100 OR \"identification_number\" = 1000)) + AND ((\"product_code\" = \"222\" OR \"product_code\" = \"111\") AND \"amount\" > 0) + "; + + let first_sub_query = "SELECT * FROM \"complex_idx_test\" WHERE ((\"identification_number\" = 1 OR (\"identification_number\" = 100 OR \"identification_number\" = 1000)) AND ((\"product_code\" = \"222\" OR \"product_code\" = \"111\") AND \"amount\" > 0)) AND (\"sys_from\" <= 0 AND \"sys_to\" >= 0)".to_string(); + let second_sub_query = "SELECT * FROM \"complex_idx_test\" WHERE ((\"identification_number\" = 1 OR (\"identification_number\" = 100 OR \"identification_number\" = 1000)) AND ((\"product_code\" = \"222\" OR \"product_code\" = \"111\") AND \"amount\" > 0)) AND (\"sys_from\" <= 0)".to_string(); + let mut expected_result = Vec::new(); + expected_result.push(QueryResult { bucket_id: 2926, node_query: first_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 22115, node_query: first_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 6672, node_query: first_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 4202, node_query: first_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 23259, node_query: first_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 6557, node_query: first_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 2926, node_query: second_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 22115, node_query: second_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 6672, node_query: second_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 4202, node_query: second_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 23259, node_query: second_sub_query.clone() }); + expected_result.push(QueryResult { bucket_id: 6557, node_query: second_sub_query.clone() }); + + let s = ClusterSchema::from(TEST_SCHEMA.to_string()); + let q = UserQuery::new(test_query, s, 30000).unwrap(); + assert_eq!(q.transform().unwrap(), expected_result) + } + #[test] fn test_unsupported_query() { let s = ClusterSchema::from(TEST_SCHEMA.to_string());