Details

Type: Bug

Status: Closed

Priority: Major

Resolution: Fixed

Affects Version/s: None

Fix Version/s: 1.9.0

Component/s: None

Labels:None
Description
When converting to conjunctive normal form (CNF), fail if the expression exceeds a threshold. CNF can explode exponentially in the size of the input expression, but rarely does so in practice. Add a maxNodeCount parameter to RexUtil.toCnf and throw or return null if it is exceeded.
I don't believe it is possible to predict the size of the CNF from the input expression (especially if there are duplicate terms) but I might be wrong.
Issue Links
 blocks

CALCITE1356 Release Calcite 1.9.0
 Closed
 is related to

HIVE14021 When converting to CNF, fail if the expression exceeds a threshold
 Closed
 relates to

CALCITE1790 Simplify CASE P1 THEN <boolean> P@ THEN <booleans> ... ELSE TRUE/FALSE
 Open
Activity
 All
 Comments
 Work Log
 History
 Activity
 Transitions
The bound could be in terms of number of leaves (counting a leaf twice if it occurs in two expressions) or in terms of nodes (leaves plus interior nodes). I don't mind which... either would be effective, and one might be easier to compute efficiently as the CNF is being built.