-
Type:
Bug
-
Resolution: Fixed
-
Priority:
Major - P3
-
Affects Version/s: None
-
Component/s: None
-
None
-
Query Optimization
-
Fully Compatible
-
ALL
-
QO 2023-01-09, QO 2023-01-23
-
None
-
None
-
None
-
None
-
None
-
None
-
None
Intersecting DNF intervals can sometimes lead to less strict bounds than expected. If we call intersectDNFIntervals with the following:
{
{
{=Variable [a]}
^
{(Variable [b], Variable [c])}
}
}
The result** is
{
{
[b >= a ? MaxKey : a, min(max(a,b), min(a,c))]
}
U
{
[max(max(a,b), min(a,c)), c <= a ? MinKey : a]
}
U
{
(max(a,b), min(a,c))
}
}
If we have a=3, b=0, and c=3 then our original interval is [3,3] ^ (0, 3) = nothing. The result from intersectDNFIntervals is
{
{
[3, 3]
}
U
{
nothing
}
U
{
nothing
}
}
which is [3,3]. This error seems to come from an auxiliary interval.
**
In reality the explain printed out is below, but its hard to read so I decoded it into min/max and ternary
{
{
{[(If [] BinaryOp [Gte] Variable [b] Variable [a] Const [maxKey] Variable [a] ), (If [] BinaryOp [Lte] (If [] BinaryOp [Gte] Variable [a] Variable [b] Variable [a] Variable [b] ) (If [] BinaryOp [Lte] Variable [a] Variable [c] Variable [a] Variable [c] ) (If [] BinaryOp [Gte] Variable [a] Variable [b] Variable [a] Variable [b] ) (If [] BinaryOp [Lte] Variable [a] Variable [c] Variable [a] Variable [c] ) )]}
}
U
{
{[(If [] BinaryOp [Gte] (If [] BinaryOp [Gte] Variable [a] Variable [b] Variable [a] Variable [b] ) (If [] BinaryOp [Lte] Variable [a] Variable [c] Variable [a] Variable [c] ) (If [] BinaryOp [Gte] Variable [a] Variable [b] Variable [a] Variable [b] ) (If [] BinaryOp [Lte] Variable [a] Variable [c] Variable [a] Variable [c] ) ), (If [] BinaryOp [Lte] Variable [c] Variable [a] Const [minKey] Variable [a] )]}
}
U
{
{((If [] BinaryOp [Gte] Variable [a] Variable [b] Variable [a] Variable [b] ), (If [] BinaryOp [Lte] Variable [a] Variable [c] Variable [a] Variable [c] ))}
}
}