/** * 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. */ package org.apache.tajo.jdbc.util; import com.google.common.collect.Lists; import org.apache.tajo.catalog.CatalogUtil; import org.apache.tajo.client.ResultSetUtil; import org.apache.tajo.common.TajoDataTypes.DataType; import org.apache.tajo.common.TajoDataTypes.Type; import org.junit.Test; import java.sql.SQLException; import java.sql.Types; import java.util.List; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; public class TestResultSetUtil { @Test public void testDataTypes() throws Exception { for (DataType type : getDataTyps()) { validate(type); } } private void validate(DataType type) throws SQLException { int sqlType = ResultSetUtil.tajoTypeToSqlType(type); switch (type.getType()) { case BIT: assertEquals(Types.BIT, sqlType); assertEquals("bit", ResultSetUtil.toSqlType(type)); assertEquals(1, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(1, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case BOOLEAN: assertEquals(Types.BOOLEAN, sqlType); assertEquals("boolean", ResultSetUtil.toSqlType(type)); assertEquals(1, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(1, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case INT1: assertEquals(Types.TINYINT, sqlType); assertEquals("tinyint", ResultSetUtil.toSqlType(type)); assertEquals(4, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(3, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case INT2: assertEquals(Types.SMALLINT, sqlType); assertEquals("smallint", ResultSetUtil.toSqlType(type)); assertEquals(6, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(5, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case INT4: assertEquals(Types.INTEGER, sqlType); assertEquals("integer", ResultSetUtil.toSqlType(type)); assertEquals(11, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(10, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case INT8: assertEquals(Types.BIGINT, sqlType); assertEquals("bigint", ResultSetUtil.toSqlType(type)); assertEquals(20, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(19, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case FLOAT4: assertEquals(Types.FLOAT, sqlType); assertEquals("float", ResultSetUtil.toSqlType(type)); assertEquals(24, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(7, ResultSetUtil.columnPrecision(sqlType)); assertEquals(7, ResultSetUtil.columnScale(sqlType)); break; case FLOAT8: assertEquals(Types.DOUBLE, sqlType); assertEquals("double", ResultSetUtil.toSqlType(type)); assertEquals(25, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(15, ResultSetUtil.columnPrecision(sqlType)); assertEquals(15, ResultSetUtil.columnScale(sqlType)); break; case DATE: assertEquals(Types.DATE, sqlType); assertEquals("date", ResultSetUtil.toSqlType(type)); assertEquals(10, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(10, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case TIMESTAMP: assertEquals(Types.TIMESTAMP, sqlType); assertEquals("timestamp", ResultSetUtil.toSqlType(type)); assertEquals(29, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(29, ResultSetUtil.columnPrecision(sqlType)); assertEquals(9, ResultSetUtil.columnScale(sqlType)); break; case TIME: assertEquals(Types.TIME, sqlType); assertEquals("time", ResultSetUtil.toSqlType(type)); assertEquals(18, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(18, ResultSetUtil.columnPrecision(sqlType)); assertEquals(9, ResultSetUtil.columnScale(sqlType)); break; case CHAR: case VARCHAR: case TEXT: assertEquals(Types.VARCHAR, sqlType); assertEquals("varchar", ResultSetUtil.toSqlType(type)); assertEquals(Integer.MAX_VALUE, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(Integer.MAX_VALUE, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case BLOB: assertEquals(Types.BLOB, sqlType); assertEquals("blob", ResultSetUtil.toSqlType(type)); assertEquals(0, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(Integer.MAX_VALUE, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case RECORD: assertEquals(Types.STRUCT, sqlType); assertEquals("struct", ResultSetUtil.toSqlType(type)); assertEquals(0, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(Integer.MAX_VALUE, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; case NULL_TYPE: assertEquals(Types.NULL, sqlType); assertEquals("null", ResultSetUtil.toSqlType(type)); assertEquals(4, ResultSetUtil.columnDisplaySize(sqlType)); assertEquals(0, ResultSetUtil.columnPrecision(sqlType)); assertEquals(0, ResultSetUtil.columnScale(sqlType)); break; default: fail("Unrecognized column type: " + type); break; } } private List<DataType> getDataTyps() { List<DataType> typeList = Lists.newArrayList(); for (Type type : getSupportDataTyps()) { typeList.add(CatalogUtil.newSimpleDataType(type)); } return typeList; } private Type[] getSupportDataTyps() { return new Type[]{Type.NULL_TYPE, Type.BOOLEAN, Type.BIT, Type.INT1, Type.INT2, Type.INT4, Type.INT8, Type.FLOAT4, Type.FLOAT8, Type.CHAR, Type.VARCHAR, Type.TEXT, Type.DATE, Type.TIME, Type.TIMESTAMP, Type.BLOB, Type.RECORD}; } }