#   Copyright 2011-2015 Quickstep Technologies LLC.
#   Copyright 2015 Pivotal Software, Inc.
#
#   Licensed under the Apache License, Version 2.0 (the "License");
#   you may not use this file except in compliance with the License.
#   You may obtain a copy of the License at
#
#       http://www.apache.org/licenses/LICENSE-2.0
#
#   Unless required by applicable law or agreed to in writing, software
#   distributed under the License is distributed on an "AS IS" BASIS,
#   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#   See the License for the specific language governing permissions and
#   limitations under the License.

SELECT AGG(*), AGG(), AGG(a, b, c) FROM test
--
SelectStatement
+-select_query=Select
  +-select_clause=SelectList
  | +-SelectListItem
  | | +-FunctionCall[name=AGG,is_star=true]
  | +-SelectListItem
  | | +-FunctionCall[name=AGG]
  | +-SelectListItem
  |   +-FunctionCall[name=AGG]
  |     +-AttributeReference[attribute_name=a]
  |     +-AttributeReference[attribute_name=b]
  |     +-AttributeReference[attribute_name=c]
  +-from_clause=
    +-TableReference[table=test]
==

SELECT AGG()+1, AGG()*2+1+AGG(a, b)/AGG(c, d) FROM test
--
SelectStatement
+-select_query=Select
  +-select_clause=SelectList
  | +-SelectListItem
  | | +-Add
  | |   +-left_operand=FunctionCall[name=AGG]
  | |   +-right_operand=Literal
  | |     +-NumericLiteral[numeric_string=1,float_like=false]
  | +-SelectListItem
  |   +-Add
  |     +-left_operand=Add
  |     | +-left_operand=Multiply
  |     | | +-left_operand=FunctionCall[name=AGG]
  |     | | +-right_operand=Literal
  |     | |   +-NumericLiteral[numeric_string=2,float_like=false]
  |     | +-right_operand=Literal
  |     |   +-NumericLiteral[numeric_string=1,float_like=false]
  |     +-right_operand=Divide
  |       +-left_operand=FunctionCall[name=AGG]
  |       | +-AttributeReference[attribute_name=a]
  |       | +-AttributeReference[attribute_name=b]
  |       +-right_operand=FunctionCall[name=AGG]
  |         +-AttributeReference[attribute_name=c]
  |         +-AttributeReference[attribute_name=d]
  +-from_clause=
    +-TableReference[table=test]
==

# Function calls as arguments of another function calls.
# This is just for testing purpose. If agg is an aggregation,
# the query is not valid. The query resolver will capture the error.
SELECT AGG(AGG(AGG()+1)*2, AGG(*)/2.0) FROM test
--
SelectStatement
+-select_query=Select
  +-select_clause=SelectList
  | +-SelectListItem
  |   +-FunctionCall[name=AGG]
  |     +-Multiply
  |     | +-left_operand=FunctionCall[name=AGG]
  |     | | +-Add
  |     | |   +-left_operand=FunctionCall[name=AGG]
  |     | |   +-right_operand=Literal
  |     | |     +-NumericLiteral[numeric_string=1,float_like=false]
  |     | +-right_operand=Literal
  |     |   +-NumericLiteral[numeric_string=2,float_like=false]
  |     +-Divide
  |       +-left_operand=FunctionCall[name=AGG,is_star=true]
  |       +-right_operand=Literal
  |         +-NumericLiteral[numeric_string=2.0,float_like=true]
  +-from_clause=
    +-TableReference[table=test]
==

SELECT AGG(*, a) FROM test
--
ERROR: syntax error (1 : 13)
SELECT AGG(*, a) FROM test
            ^
==

SELECT AGG()+1 FROM test GROUP BY a+1, AGG()+1 HAVING AGG()*2>1
--
SelectStatement
+-select_query=Select
  +-select_clause=SelectList
  | +-SelectListItem
  |   +-Add
  |     +-left_operand=FunctionCall[name=AGG]
  |     +-right_operand=Literal
  |       +-NumericLiteral[numeric_string=1,float_like=false]
  +-group_by=GroupBy
  | +-Add
  | | +-left_operand=AttributeReference[attribute_name=a]
  | | +-right_operand=Literal
  | |   +-NumericLiteral[numeric_string=1,float_like=false]
  | +-Add
  |   +-left_operand=FunctionCall[name=AGG]
  |   +-right_operand=Literal
  |     +-NumericLiteral[numeric_string=1,float_like=false]
  +-having=HAVING
  | +-Greater
  |   +-left_operand=Multiply
  |   | +-left_operand=FunctionCall[name=AGG]
  |   | +-right_operand=Literal
  |   |   +-NumericLiteral[numeric_string=2,float_like=false]
  |   +-right_operand=Literal
  |     +-NumericLiteral[numeric_string=1,float_like=false]
  +-from_clause=
    +-TableReference[table=test]
==

SELECT 1 FROM test HAVING AGG() > 1 AND 1=1
--
SelectStatement
+-select_query=Select
  +-select_clause=SelectList
  | +-SelectListItem
  |   +-Literal
  |     +-NumericLiteral[numeric_string=1,float_like=false]
  +-having=HAVING
  | +-And
  |   +-Greater
  |   | +-left_operand=FunctionCall[name=AGG]
  |   | +-right_operand=Literal
  |   |   +-NumericLiteral[numeric_string=1,float_like=false]
  |   +-Equal
  |     +-left_operand=Literal
  |     | +-NumericLiteral[numeric_string=1,float_like=false]
  |     +-right_operand=Literal
  |       +-NumericLiteral[numeric_string=1,float_like=false]
  +-from_clause=
    +-TableReference[table=test]
==

SELECT 1 FROM test GROUP BY AGG()+1, AGG()/AGG()
--
SelectStatement
+-select_query=Select
  +-select_clause=SelectList
  | +-SelectListItem
  |   +-Literal
  |     +-NumericLiteral[numeric_string=1,float_like=false]
  +-group_by=GroupBy
  | +-Add
  | | +-left_operand=FunctionCall[name=AGG]
  | | +-right_operand=Literal
  | |   +-NumericLiteral[numeric_string=1,float_like=false]
  | +-Divide
  |   +-left_operand=FunctionCall[name=AGG]
  |   +-right_operand=FunctionCall[name=AGG]
  +-from_clause=
    +-TableReference[table=test]
==

SELECT AGG(DISTINCT x), AGG(y) FROM test GROUP BY z
--
SelectStatement
+-select_query=Select
  +-select_clause=SelectList
  | +-SelectListItem
  | | +-FunctionCall[name=AGG,is_distinct=true]
  | |   +-AttributeReference[attribute_name=x]
  | +-SelectListItem
  |   +-FunctionCall[name=AGG]
  |     +-AttributeReference[attribute_name=y]
  +-group_by=GroupBy
  | +-AttributeReference[attribute_name=z]
  +-from_clause=
    +-TableReference[table=test]
==

SELECT AGG(DISTINCT FUN(x) + y) * AGG(z)
FROM test
GROUP BY z
HAVING AGG(DISTINCT w) + AGG(s) > 1
--
SelectStatement
+-select_query=Select
  +-select_clause=SelectList
  | +-SelectListItem
  |   +-Multiply
  |     +-left_operand=FunctionCall[name=AGG,is_distinct=true]
  |     | +-Add
  |     |   +-left_operand=FunctionCall[name=FUN]
  |     |   | +-AttributeReference[attribute_name=x]
  |     |   +-right_operand=AttributeReference[attribute_name=y]
  |     +-right_operand=FunctionCall[name=AGG]
  |       +-AttributeReference[attribute_name=z]
  +-group_by=GroupBy
  | +-AttributeReference[attribute_name=z]
  +-having=HAVING
  | +-Greater
  |   +-left_operand=Add
  |   | +-left_operand=FunctionCall[name=AGG,is_distinct=true]
  |   | | +-AttributeReference[attribute_name=w]
  |   | +-right_operand=FunctionCall[name=AGG]
  |   |   +-AttributeReference[attribute_name=s]
  |   +-right_operand=Literal
  |     +-NumericLiteral[numeric_string=1,float_like=false]
  +-from_clause=
    +-TableReference[table=test]
==
