# Test implicit and explicit casts. Binary predicates containing an explicit cast # cannot be offered to the data source. select * from functional.alltypes_datasource where tinyint_col < 256 and float_col != 0 and cast(int_col as bigint) < 10 ---- PLAN 00:SCAN DATA SOURCE [functional.alltypes_datasource] data source predicates: tinyint_col < 256 predicates: float_col != 0, CAST(int_col AS BIGINT) < 10 ==== # The first four predicates are in a form that can be offered to the data source # and the first and third will be accepted (it accepts every other conjunct). # The second and fourth will be evaluated by Impala. The negated predicates, # i.e. NOT , are not in a form able to be offered to the data source, # so they will always be evaluated by Impala. select * from functional.alltypes_datasource where 10 > int_col and 5 > double_col and string_col != "Foo" and string_col != "Bar" and not true = bool_col and not 5.0 = double_col ---- PLAN 00:SCAN DATA SOURCE [functional.alltypes_datasource] data source predicates: 10 > int_col, string_col != 'Foo' predicates: 5 > double_col, string_col != 'Bar', NOT TRUE = bool_col, NOT 5.0 = double_col ==== # The 3rd predicate is not in a form that can be offered to the data source so # the 4th will be offered and accepted instead. select * from functional.alltypes_datasource where int_col < 10 and double_col > 5 and string_col in ("Foo", "Bar") and bool_col != false ---- PLAN 00:SCAN DATA SOURCE [functional.alltypes_datasource] data source predicates: int_col < 10, bool_col != FALSE predicates: double_col > 5, string_col IN ('Foo', 'Bar') ==== # Tests that all predicates from the On-clause are applied (IMPALA-805) # and that slot equivalences are enforced at lowest possible plan node # for tables produced by a data source. select 1 from functional.alltypes_datasource a inner join functional.alltypes_datasource b # equivalence class on a.id = b.id and a.id = b.int_col and a.id = b.bigint_col and a.tinyint_col = b.id and a.smallint_col = b.id and a.int_col = b.id and a.bigint_col = b.id # redundant predicates to test minimal spanning tree of equivalent slots where a.tinyint_col = a.smallint_col and a.int_col = a.bigint_col ---- PLAN 02:HASH JOIN [INNER JOIN] | hash predicates: a.id = b.id | |--01:SCAN DATA SOURCE [functional.alltypes_datasource b] |--predicates: b.id = b.int_col, b.id = b.bigint_col | 00:SCAN DATA SOURCE [functional.alltypes_datasource a] predicates: a.tinyint_col = a.smallint_col, a.int_col = a.bigint_col, a.id = a.tinyint_col, a.id = a.int_col ====