public class HiveRexUtil extends Object
Modifier and Type | Class and Description |
---|---|
static class |
HiveRexUtil.ExprSimplifier |
Modifier and Type | Field and Description |
---|---|
protected static org.slf4j.Logger |
LOG |
Constructor and Description |
---|
HiveRexUtil() |
Modifier and Type | Method and Description |
---|---|
static org.apache.calcite.sql.SqlKind |
invert(org.apache.calcite.sql.SqlKind kind) |
static org.apache.calcite.rex.RexNode |
simplify(org.apache.calcite.rex.RexBuilder rexBuilder,
org.apache.calcite.rex.RexNode e)
Simplifies a boolean expression.
|
static org.apache.calcite.rex.RexNode |
simplify(org.apache.calcite.rex.RexBuilder rexBuilder,
org.apache.calcite.rex.RexNode e,
boolean unknownAsFalse) |
static org.apache.calcite.rex.RexNode |
simplifyAnd(org.apache.calcite.rex.RexBuilder rexBuilder,
org.apache.calcite.rex.RexCall e,
boolean unknownAsFalse) |
static org.apache.calcite.rex.RexNode |
simplifyAnd2(org.apache.calcite.rex.RexBuilder rexBuilder,
List<org.apache.calcite.rex.RexNode> terms,
List<org.apache.calcite.rex.RexNode> notTerms) |
static org.apache.calcite.rex.RexNode |
simplifyAnd2ForUnknownAsFalse(org.apache.calcite.rex.RexBuilder rexBuilder,
List<org.apache.calcite.rex.RexNode> terms,
List<org.apache.calcite.rex.RexNode> notTerms)
As
simplifyAnd2(RexBuilder, List, List) but we assume that if the expression returns
UNKNOWN it will be interpreted as FALSE. |
static org.apache.calcite.rex.RexNode |
simplifyOr(org.apache.calcite.rex.RexBuilder rexBuilder,
org.apache.calcite.rex.RexCall call)
Simplifies OR(x, x) into x, and similar.
|
static org.apache.calcite.rex.RexNode |
toCnf(org.apache.calcite.rex.RexBuilder rexBuilder,
int maxCNFNodeCount,
org.apache.calcite.rex.RexNode rex) |
static org.apache.calcite.rex.RexNode |
toCnf(org.apache.calcite.rex.RexBuilder rexBuilder,
org.apache.calcite.rex.RexNode rex)
Converts an expression to conjunctive normal form (CNF).
|
public static org.apache.calcite.rex.RexNode toCnf(org.apache.calcite.rex.RexBuilder rexBuilder, org.apache.calcite.rex.RexNode rex)
The following expression is in CNF:
(a OR b) AND (c OR d)
The following expression is not in CNF:
(a AND b) OR cbut can be converted to CNF:
(a OR c) AND (b OR c)
The following expression is not in CNF:
NOT (a OR NOT b)but can be converted to CNF by applying de Morgan's theorem:
NOT a AND b
Expressions not involving AND, OR or NOT at the top level are in CNF.
public static org.apache.calcite.rex.RexNode toCnf(org.apache.calcite.rex.RexBuilder rexBuilder, int maxCNFNodeCount, org.apache.calcite.rex.RexNode rex)
public static org.apache.calcite.rex.RexNode simplify(org.apache.calcite.rex.RexBuilder rexBuilder, org.apache.calcite.rex.RexNode e)
In particular:
simplify(x = 1 AND y = 2 AND NOT x = 1)
returns y = 2
simplify(x = 1 AND FALSE)
returns FALSE
public static org.apache.calcite.rex.RexNode simplify(org.apache.calcite.rex.RexBuilder rexBuilder, org.apache.calcite.rex.RexNode e, boolean unknownAsFalse)
public static org.apache.calcite.rex.RexNode simplifyAnd(org.apache.calcite.rex.RexBuilder rexBuilder, org.apache.calcite.rex.RexCall e, boolean unknownAsFalse)
public static org.apache.calcite.rex.RexNode simplifyAnd2(org.apache.calcite.rex.RexBuilder rexBuilder, List<org.apache.calcite.rex.RexNode> terms, List<org.apache.calcite.rex.RexNode> notTerms)
public static org.apache.calcite.rex.RexNode simplifyAnd2ForUnknownAsFalse(org.apache.calcite.rex.RexBuilder rexBuilder, List<org.apache.calcite.rex.RexNode> terms, List<org.apache.calcite.rex.RexNode> notTerms)
simplifyAnd2(RexBuilder, List, List)
but we assume that if the expression returns
UNKNOWN it will be interpreted as FALSE.public static org.apache.calcite.rex.RexNode simplifyOr(org.apache.calcite.rex.RexBuilder rexBuilder, org.apache.calcite.rex.RexCall call)
public static org.apache.calcite.sql.SqlKind invert(org.apache.calcite.sql.SqlKind kind)
Copyright © 2016 The Apache Software Foundation. All rights reserved.