James Taylor created PHOENIX-3489:
-------------------------------------

             Summary: Compile out expressions formed by only columns with WHERE 
clause equality constraints in GROUP BY and ORDER BY
                 Key: PHOENIX-3489
                 URL: https://issues.apache.org/jira/browse/PHOENIX-3489
             Project: Phoenix
          Issue Type: Bug
            Reporter: James Taylor


Since columns constrained by equality constraints evaluate to the same constant 
value, expressions formed only by them may be stripped out of GROUP BY and 
ORDER BY clauses.

For example, the group by key for this query can be only pk2:
{code}
SELECT FLOOR(pk1), pk2 FROM t WHERE pk1 = 1 
GROUP BY FLOOR(pk1), pk2
{code}
This can be implemented by
- using OrderPreservingTracker.IsConstantVisitor to detect this case
- evaluating the expression at compilation time
- storing the resulting LiteralExpression as the leading group by expressions
- storing the count of constant expressions in GroupBy as constantGroupByCount
- modifying ExpressionCompiler.wrapGroupByExpression() to return the 
LiteralExpression when the position is less that the constantGroupByCount
- sending to the server only non constants in the GroupBy.keyExpressions list

For ORDER BY, we can simply remove these expressions from the 
OrderBy.orderByExpressions lists. A further optimization would be to not even 
project the constant ORDER BY expression and transform it into a literal on the 
client side.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to