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 : '<=>';