/*
* 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.
*/
package com.facebook.presto.operator.scalar;
import com.facebook.presto.spi.type.VarcharType;
import org.testng.annotations.Test;
public class TestTypeOfFunction
extends AbstractTestFunctions
{
@Test
public void testSimpleType()
throws Exception
{
assertFunction("typeof(CAST(1 AS BIGINT))", VarcharType.VARCHAR, "bigint");
assertFunction("typeof(CAST(1 AS INTEGER))", VarcharType.VARCHAR, "integer");
assertFunction("typeof(CAST(1 AS VARCHAR))", VarcharType.VARCHAR, "varchar");
assertFunction("typeof(CAST(1 AS DOUBLE))", VarcharType.VARCHAR, "double");
assertFunction("typeof(123)", VarcharType.VARCHAR, "integer");
assertFunction("typeof('cat')", VarcharType.VARCHAR, "varchar(3)");
assertFunction("typeof(NULL)", VarcharType.VARCHAR, "unknown");
}
@Test
public void testParametricType()
throws Exception
{
assertFunction("typeof(CAST(NULL AS VARCHAR(10)))", VarcharType.VARCHAR, "varchar(10)");
assertFunction("typeof(CAST(NULL AS DECIMAL(5,1)))", VarcharType.VARCHAR, "decimal(5,1)");
assertFunction("typeof(CAST(NULL AS DECIMAL(1)))", VarcharType.VARCHAR, "decimal(1,0)");
assertFunction("typeof(CAST(NULL AS DECIMAL))", VarcharType.VARCHAR, "decimal(38,0)");
assertFunction("typeof(CAST(NULL AS ARRAY(INTEGER)))", VarcharType.VARCHAR, "array(integer)");
assertFunction("typeof(CAST(NULL AS ARRAY(DECIMAL(5,1))))", VarcharType.VARCHAR, "array(decimal(5,1))");
}
@Test
public void testNestedType()
throws Exception
{
assertFunction("typeof(CAST(NULL AS ARRAY(ARRAY(ARRAY(INTEGER)))))", VarcharType.VARCHAR, "array(array(array(integer)))");
assertFunction("typeof(CAST(NULL AS ARRAY(ARRAY(ARRAY(DECIMAL(5,1))))))", VarcharType.VARCHAR, "array(array(array(decimal(5,1))))");
}
@Test
public void testComplex()
throws Exception
{
assertFunction("typeof(CONCAT('ala','ma','kota'))", VarcharType.VARCHAR, "varchar");
assertFunction("typeof(CONCAT(CONCAT('ala','ma','kota'), 'baz'))", VarcharType.VARCHAR, "varchar");
assertFunction("typeof(ARRAY [CAST(1 AS INTEGER),CAST(2 AS INTEGER),CAST(3 AS INTEGER)])", VarcharType.VARCHAR, "array(integer)");
assertFunction("typeof(sin(2))", VarcharType.VARCHAR, "double");
assertFunction("typeof(2+sin(2)+2.3)", VarcharType.VARCHAR, "double");
}
}