This is an automated email from the ASF dual-hosted git repository.

dkuzmenko pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git


The following commit(s) were added to refs/heads/master by this push:
     new 5317fc7e928 HIVE-28705: Fix Data Inconsistency Due to missing 'IS NOT? 
TRUE/FALSE' parsing in Partition Filter Pruning (Indhumathi Muthumurugesh, 
reviewed by Denys Kuzmenko, Kokila N)
5317fc7e928 is described below

commit 5317fc7e928743abb433716babe58066aa60ce11
Author: Indhumathi <[email protected]>
AuthorDate: Wed Feb 12 17:23:35 2025 +0530

    HIVE-28705: Fix Data Inconsistency Due to missing 'IS NOT? TRUE/FALSE' 
parsing in Partition Filter Pruning (Indhumathi Muthumurugesh, reviewed by 
Denys Kuzmenko, Kokila N)
    
    Closes #5614
---
 .../casewhen_isnot_boolean_partition.q             |  95 +++
 .../llap/casewhen_isnot_boolean_partition.q.out    | 924 +++++++++++++++++++++
 .../hive/metastore/parser/PartFilterVisitor.java   |  85 ++
 .../hive/metastore/parser/PartitionFilter.g4       |  11 +
 4 files changed, 1115 insertions(+)

diff --git 
a/ql/src/test/queries/clientpositive/casewhen_isnot_boolean_partition.q 
b/ql/src/test/queries/clientpositive/casewhen_isnot_boolean_partition.q
new file mode 100644
index 00000000000..076702de76f
--- /dev/null
+++ b/ql/src/test/queries/clientpositive/casewhen_isnot_boolean_partition.q
@@ -0,0 +1,95 @@
+create table t1(id int) partitioned by (month int, year string);
+insert into t1 select 2,2,'2020';
+insert into t1 select 3,3,'2024';
+insert into t1 select 4,4,'2020';
+
+select id from t1 where (CASE WHEN (month=3) THEN true else false END);
+select id from t1 where (CASE WHEN (month=3) THEN false else true END);
+select id from t1 where (CASE WHEN (year='2024') THEN true else false END);
+select id from t1 where (CASE WHEN (year='2024') THEN false else true END);
+
+select id from t1 where (CASE WHEN (month=3 and year='2024') THEN true else 
false END);
+select id from t1 where (CASE WHEN (month=3 and year='2024') THEN false else 
true END);
+
+select id from t1 where (CASE WHEN (month=3 or month=4) THEN true else false 
END);
+select id from t1 where (CASE WHEN (month=3 or month=4) THEN false else true 
END);
+
+select id from t1 where (month=3) is not true;
+select id from t1 where (month=3) is true;
+select id from t1 where (month=3) is not false;
+select id from t1 where (month=3) is false;
+
+select id from t1 where (month=3 or month=4) is not true;
+select id from t1 where (month=3 or month=4) is true;
+select id from t1 where (month=3 or month=4) is not false;
+select id from t1 where (month=3 or month=4) is false;
+
+select id from t1 where (month=3 and id=3) is not true;
+select id from t1 where (month=3 and id=3) is true;
+select id from t1 where (month=3 and id=3) is not false;
+select id from t1 where (month=3 and id=3) is false;
+
+select id from t1 where (month=3) and (id=3) is not true;
+select id from t1 where (month=3) and (id=3) is true;
+select id from t1 where (month=3) and (id=3) is not false;
+select id from t1 where (month=3) and (id=3) is false;
+
+select id from t1 where ((month=3 or month=4) and year='2024') is not true;
+select id from t1 where ((month=3 or month=4) and year='2024') is true;
+select id from t1 where ((month=3 or month=4) and year='2024') is not false;
+select id from t1 where ((month=3 or month=4) and year='2024') is false;
+
+select id from t1 where month in (3,4) is not true;
+select id from t1 where month not in (3,4) is not true;
+select id from t1 where month in (3,4) is not false;
+select id from t1 where month not in (3,4) is not false;
+select id from t1 where month in (3,4) is  true;
+select id from t1 where month not in (3,4) is true;
+select id from t1 where month in (3,4) is  false;
+select id from t1 where month not in (3,4) is false;
+
+set hive.cbo.enable=false;
+select id from t1 where (CASE WHEN (month=3) THEN true else false END);
+select id from t1 where (CASE WHEN (month=3) THEN false else true END);
+select id from t1 where (CASE WHEN (year='2024') THEN true else false END);
+select id from t1 where (CASE WHEN (year='2024') THEN false else true END);
+
+select id from t1 where (CASE WHEN (month=3 and year='2024') THEN true else 
false END);
+select id from t1 where (CASE WHEN (month=3 and year='2024') THEN false else 
true END);
+
+select id from t1 where (CASE WHEN (month=3 or month=4) THEN true else false 
END);
+select id from t1 where (CASE WHEN (month=3 or month=4) THEN false else true 
END);
+
+select id from t1 where (month=3) is not true;
+select id from t1 where (month=3) is true;
+select id from t1 where (month=3) is not false;
+select id from t1 where (month=3) is false;
+
+select id from t1 where (month=3 or month=4) is not true;
+select id from t1 where (month=3 or month=4) is true;
+select id from t1 where (month=3 or month=4) is not false;
+select id from t1 where (month=3 or month=4) is false;
+
+select id from t1 where (month=3 and id=3) is not true;
+select id from t1 where (month=3 and id=3) is true;
+select id from t1 where (month=3 and id=3) is not false;
+select id from t1 where (month=3 and id=3) is false;
+
+select id from t1 where (month=3) and (id=3) is not true;
+select id from t1 where (month=3) and (id=3) is true;
+select id from t1 where (month=3) and (id=3) is not false;
+select id from t1 where (month=3) and (id=3) is false;
+
+select id from t1 where ((month=3 or month=4) and year='2024') is not true;
+select id from t1 where ((month=3 or month=4) and year='2024') is true;
+select id from t1 where ((month=3 or month=4) and year='2024') is not false;
+select id from t1 where ((month=3 or month=4) and year='2024') is false;
+
+select id from t1 where month in (3,4) is not true;
+select id from t1 where month not in (3,4) is not true;
+select id from t1 where month in (3,4) is not false;
+select id from t1 where month not in (3,4) is not false;
+select id from t1 where month in (3,4) is  true;
+select id from t1 where month not in (3,4) is true;
+select id from t1 where month in (3,4) is  false;
+select id from t1 where month not in (3,4) is false;
\ No newline at end of file
diff --git 
a/ql/src/test/results/clientpositive/llap/casewhen_isnot_boolean_partition.q.out
 
b/ql/src/test/results/clientpositive/llap/casewhen_isnot_boolean_partition.q.out
new file mode 100644
index 00000000000..f5b67c1dbde
--- /dev/null
+++ 
b/ql/src/test/results/clientpositive/llap/casewhen_isnot_boolean_partition.q.out
@@ -0,0 +1,924 @@
+PREHOOK: query: create table t1(id int) partitioned by (month int, year string)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:default
+PREHOOK: Output: default@t1
+POSTHOOK: query: create table t1(id int) partitioned by (month int, year 
string)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:default
+POSTHOOK: Output: default@t1
+PREHOOK: query: insert into t1 select 2,2,'2020'
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@t1
+POSTHOOK: query: insert into t1 select 2,2,'2020'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@t1
+POSTHOOK: Output: default@t1@month=2/year=2020
+POSTHOOK: Lineage: t1 PARTITION(month=2,year=2020).id SIMPLE []
+PREHOOK: query: insert into t1 select 3,3,'2024'
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@t1
+POSTHOOK: query: insert into t1 select 3,3,'2024'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@t1
+POSTHOOK: Output: default@t1@month=3/year=2024
+POSTHOOK: Lineage: t1 PARTITION(month=3,year=2024).id SIMPLE []
+PREHOOK: query: insert into t1 select 4,4,'2020'
+PREHOOK: type: QUERY
+PREHOOK: Input: _dummy_database@_dummy_table
+PREHOOK: Output: default@t1
+POSTHOOK: query: insert into t1 select 4,4,'2020'
+POSTHOOK: type: QUERY
+POSTHOOK: Input: _dummy_database@_dummy_table
+POSTHOOK: Output: default@t1
+POSTHOOK: Output: default@t1@month=4/year=2020
+POSTHOOK: Lineage: t1 PARTITION(month=4,year=2020).id SIMPLE []
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3) THEN true else 
false END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3) THEN true else 
false END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3) THEN false else 
true END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3) THEN false else 
true END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (year='2024') THEN true 
else false END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (year='2024') THEN true 
else false END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (CASE WHEN (year='2024') THEN false 
else true END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (year='2024') THEN false 
else true END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3 and year='2024') 
THEN true else false END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3 and year='2024') 
THEN true else false END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3 and year='2024') 
THEN false else true END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3 and year='2024') 
THEN false else true END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3 or month=4) THEN 
true else false END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3 or month=4) THEN 
true else false END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3 or month=4) THEN 
false else true END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3 or month=4) THEN 
false else true END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where (month=3) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (month=3) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (month=3 or month=4) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 or month=4) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where (month=3 or month=4) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 or month=4) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where (month=3 or month=4) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 or month=4) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where (month=3 or month=4) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 or month=4) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where (month=3 and id=3) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 and id=3) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (month=3 and id=3) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 and id=3) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3 and id=3) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 and id=3) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3 and id=3) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 and id=3) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (month=3) and (id=3) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) and (id=3) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+PREHOOK: query: select id from t1 where (month=3) and (id=3) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) and (id=3) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3) and (id=3) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) and (id=3) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3) and (id=3) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) and (id=3) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+PREHOOK: query: select id from t1 where ((month=3 or month=4) and year='2024') 
is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where ((month=3 or month=4) and 
year='2024') is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where ((month=3 or month=4) and year='2024') 
is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where ((month=3 or month=4) and 
year='2024') is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where ((month=3 or month=4) and year='2024') 
is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where ((month=3 or month=4) and 
year='2024') is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where ((month=3 or month=4) and year='2024') 
is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where ((month=3 or month=4) and 
year='2024') is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where month in (3,4) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month in (3,4) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where month not in (3,4) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month not in (3,4) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where month in (3,4) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month in (3,4) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where month not in (3,4) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month not in (3,4) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where month in (3,4) is  true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month in (3,4) is  true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where month not in (3,4) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month not in (3,4) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where month in (3,4) is  false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month in (3,4) is  false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where month not in (3,4) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month not in (3,4) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3) THEN true else 
false END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3) THEN true else 
false END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3) THEN false else 
true END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3) THEN false else 
true END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (year='2024') THEN true 
else false END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (year='2024') THEN true 
else false END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (CASE WHEN (year='2024') THEN false 
else true END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (year='2024') THEN false 
else true END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3 and year='2024') 
THEN true else false END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3 and year='2024') 
THEN true else false END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3 and year='2024') 
THEN false else true END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3 and year='2024') 
THEN false else true END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3 or month=4) THEN 
true else false END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3 or month=4) THEN 
true else false END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where (CASE WHEN (month=3 or month=4) THEN 
false else true END)
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (CASE WHEN (month=3 or month=4) THEN 
false else true END)
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where (month=3) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (month=3) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (month=3 or month=4) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 or month=4) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where (month=3 or month=4) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 or month=4) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where (month=3 or month=4) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 or month=4) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where (month=3 or month=4) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 or month=4) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where (month=3 and id=3) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 and id=3) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (month=3 and id=3) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 and id=3) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3 and id=3) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 and id=3) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3 and id=3) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3 and id=3) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where (month=3) and (id=3) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) and (id=3) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+PREHOOK: query: select id from t1 where (month=3) and (id=3) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) and (id=3) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3) and (id=3) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) and (id=3) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where (month=3) and (id=3) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where (month=3) and (id=3) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+PREHOOK: query: select id from t1 where ((month=3 or month=4) and year='2024') 
is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where ((month=3 or month=4) and 
year='2024') is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where ((month=3 or month=4) and year='2024') 
is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where ((month=3 or month=4) and 
year='2024') is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where ((month=3 or month=4) and year='2024') 
is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where ((month=3 or month=4) and 
year='2024') is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+#### A masked pattern was here ####
+3
+PREHOOK: query: select id from t1 where ((month=3 or month=4) and year='2024') 
is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where ((month=3 or month=4) and 
year='2024') is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+2
+4
+PREHOOK: query: select id from t1 where month in (3,4) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month in (3,4) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where month not in (3,4) is not true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month not in (3,4) is not true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where month in (3,4) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month in (3,4) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where month not in (3,4) is not false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month not in (3,4) is not false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where month in (3,4) is  true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month in (3,4) is  true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
+PREHOOK: query: select id from t1 where month not in (3,4) is true
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month not in (3,4) is true
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where month in (3,4) is  false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month in (3,4) is  false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=2/year=2020
+#### A masked pattern was here ####
+2
+PREHOOK: query: select id from t1 where month not in (3,4) is false
+PREHOOK: type: QUERY
+PREHOOK: Input: default@t1
+PREHOOK: Input: default@t1@month=3/year=2024
+PREHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+POSTHOOK: query: select id from t1 where month not in (3,4) is false
+POSTHOOK: type: QUERY
+POSTHOOK: Input: default@t1
+POSTHOOK: Input: default@t1@month=3/year=2024
+POSTHOOK: Input: default@t1@month=4/year=2020
+#### A masked pattern was here ####
+3
+4
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/PartFilterVisitor.java
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/PartFilterVisitor.java
index 1ce0b27eaba..28c61ba1c2a 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/PartFilterVisitor.java
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/PartFilterVisitor.java
@@ -135,6 +135,10 @@ public TreeNode 
visitInCondition(PartitionFilterParser.InConditionContext ctx) {
     List<Object> values = visitConstantSeq(ctx.constantSeq());
     boolean isPositive = ctx.NOT() == null;
     String keyName = (String) visit(ctx.key);
+    return buildInCondition(keyName, values, isPositive);
+  }
+
+  private TreeNode buildInCondition(String keyName, List<Object> values, 
boolean isPositive) {
     List<LeafNode> nodes = values.stream()
         .map(value -> {
           LeafNode leafNode = new LeafNode();
@@ -262,4 +266,85 @@ public String 
visitQuotedIdentifier(PartitionFilterParser.QuotedIdentifierContex
     return StringUtils.replace(ctx.getText().substring(1, 
ctx.getText().length() -1 ), "``", "`");
   }
 
+  @Override
+  public TreeNode 
visitBooleanCondition(PartitionFilterParser.BooleanConditionContext ctx) {
+    TreeNode exprNode = (TreeNode) visit(ctx.expression());
+    boolean isNegated = ctx.NOT() != null;  // Check for negation (NOT)
+    boolean parsedBoolean = 
Boolean.parseBoolean(ctx.booleanLiteral().getText());
+
+    // For TRUE case: return expression directly if not negated, otherwise 
negate it
+    // For FALSE case: return negated expression if not negated, otherwise 
return as is
+    return (parsedBoolean != isNegated) ? exprNode : negateTree(exprNode);
+  }
+
+  private Operator invertOperator(Operator operator) {
+    switch (operator) {
+      case EQUALS:
+        return Operator.NOTEQUALS;
+      case NOTEQUALS:
+      case NOTEQUALS2:
+        return Operator.EQUALS;
+      case GREATERTHAN:
+        return Operator.LESSTHANOREQUALTO;
+      case LESSTHAN:
+        return Operator.GREATERTHANOREQUALTO;
+      case GREATERTHANOREQUALTO:
+        return Operator.LESSTHAN;
+      case LESSTHANOREQUALTO:
+        return Operator.GREATERTHAN;
+      case LIKE:
+        throw new UnsupportedOperationException("LIKE operator inversion is 
not supported.");
+      default:
+        throw new IllegalArgumentException("Unsupported operator for 
inversion: " + operator.getOp());
+    }
+  }
+
+  @Override
+  public TreeNode 
visitBooleanWrappedExpression(PartitionFilterParser.BooleanWrappedExpressionContext
 ctx) {
+    // Visit the inner expression and check if "NOT" is used
+    TreeNode innerNode = (TreeNode) visit(ctx.orExpression());
+    boolean isNot = ctx.NOT() != null;
+    boolean parsedBoolean = 
Boolean.parseBoolean(ctx.booleanLiteral().getText());
+
+    // Return the node based on the expected boolean value (negated or not)
+    return parsedBoolean != isNot ? innerNode : negateTree(innerNode);
+  }
+
+  private TreeNode negateTree(TreeNode node) {
+    if (node instanceof LeafNode) {
+      // Negate leaf nodes directly
+      return negateLeafNode((LeafNode) node);
+    } else if (node != null) {
+      // Negate logical nodes (AND/OR) recursively
+      TreeNode negatedLeft = negateTree(node.getLhs());
+      TreeNode negatedRight = negateTree(node.getRhs());
+      LogicalOperator negatedOperator = (node.getAndOr() == 
LogicalOperator.AND)
+              ? LogicalOperator.OR
+              : LogicalOperator.AND;
+      return new TreeNode(negatedLeft, negatedOperator, negatedRight);
+    }
+    throw new IllegalArgumentException("Unknown TreeNode type");
+  }
+
+  private LeafNode negateLeafNode(LeafNode leaf) {
+    LeafNode negatedLeaf = new LeafNode();
+    negatedLeaf.keyName = leaf.keyName;
+
+    // Invert the operator for the leaf node
+    negatedLeaf.operator = invertOperator(leaf.operator);
+    negatedLeaf.value = leaf.value;
+    return negatedLeaf;
+  }
+
+  @Override
+  public TreeNode 
visitInConditionWithBoolean(PartitionFilterParser.InConditionWithBooleanContext 
ctx) {
+    List<Object> values = visitConstantSeq(ctx.constantSeq());
+    String keyName = (String) visit(ctx.key);
+    // Determine if the condition is a NOT IN by checking the presence of the 
NOT keyword
+    boolean isNotIn = !ctx.NOT().isEmpty();
+    boolean parsedBoolean = 
Boolean.parseBoolean(ctx.booleanLiteral().getText());
+
+    // If the boolean literal is TRUE, the condition should be IN, otherwise 
NOT IN
+    return buildInCondition(keyName, values, parsedBoolean != isNotIn);
+  }
 }
diff --git 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/PartitionFilter.g4
 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/PartitionFilter.g4
index d30f2057256..dd920d26813 100644
--- 
a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/PartitionFilter.g4
+++ 
b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/parser/PartitionFilter.g4
@@ -39,6 +39,9 @@ conditionExpression
     | key=identifier NOT? BETWEEN lower=constant AND upper=constant         
#betweenCondition
     | LPAREN key=identifier RPAREN NOT? IN LPAREN values=constantSeq RPAREN 
#inCondition
     | LPAREN STRUCT identifierList RPAREN NOT? IN constStructList           
#multiColInExpression
+    | LPAREN expression RPAREN IS NOT? booleanLiteral                       
#booleanCondition
+    | LPAREN orExpression RPAREN IS NOT? booleanLiteral                     
#booleanWrappedExpression
+    | LPAREN key=identifier RPAREN NOT? IN LPAREN values=constantSeq RPAREN IS 
NOT? booleanLiteral  # inConditionWithBoolean
     ;
 
 comparisonOperator
@@ -87,6 +90,11 @@ timestamp
     | value=TIMESTAMP_VALUE
     ;
 
+booleanLiteral
+    : TRUE
+    | FALSE
+    ;
+
 // Keywords
 LPAREN : '(' ;
 RPAREN : ')' ;
@@ -101,6 +109,9 @@ CONST : 'CONST';
 MINUS : '-';
 DATE : 'DATE';
 TIMESTAMP : 'TIMESTAMP';
+IS : 'IS';
+TRUE : 'TRUE';
+FALSE : 'FALSE';
 
 EQ : '=' | '==';
 NSEQ : '<=>';


Reply via email to