# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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 int_col+1, 1+int_col
FROM test
ORDER BY int_col
LIMIT 5;
--
+-----------+-----------+
|(int_col+1)|(1+int_col)|
+-----------+-----------+
|        -22|        -22|
|        -20|        -20|
|        -18|        -18|
|        -16|        -16|
|        -14|        -14|
+-----------+-----------+
==

SELECT SUM(int_col+long_col), SUM((long_col+int_col)*2)
FROM test;
--
+-----------------------+---------------------------+
|SUM((int_col+long_col))|SUM(((long_col+int_col)*2))|
+-----------------------+---------------------------+
|                   4382|                       8764|
+-----------------------+---------------------------+
==

SELECT SUM(long_col+1), SUM(long_col+1)*2, AVG(long_col+1), AVG(long_col+1)*2, COUNT(*)
FROM test;
--
+--------------------+---------------------+--------------------+---------------------+--------------------+
|SUM((long_col+1))   |(SUM((long_col+1))*2)|AVG((long_col+1))   |(AVG((long_col+1))*2)|COUNT(*)            |
+--------------------+---------------------+--------------------+---------------------+--------------------+
|                4925|                 9850|                 197|                  394|                  25|
+--------------------+---------------------+--------------------+---------------------+--------------------+
==
