This is an automated email from the ASF dual-hosted git repository. twalthr pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push: new eec9657 [FLINK-12253][table-common] Add a TINYINT type eec9657 is described below commit eec9657e20f996596956f412b06a2160d0642e4e Author: Timo Walther <twal...@apache.org> AuthorDate: Tue Apr 30 17:14:48 2019 +0200 [FLINK-12253][table-common] Add a TINYINT type --- .../table/types/logical/LogicalTypeVisitor.java | 2 + .../flink/table/types/logical/TinyIntType.java | 91 ++++++++++++++++++++++ .../apache/flink/table/types/LogicalTypesTest.java | 14 ++++ 3 files changed, 107 insertions(+) diff --git a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/LogicalTypeVisitor.java b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/LogicalTypeVisitor.java index 2ec9ca5..7fa368e 100644 --- a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/LogicalTypeVisitor.java +++ b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/LogicalTypeVisitor.java @@ -41,5 +41,7 @@ public interface LogicalTypeVisitor<R> { R visit(DecimalType decimalType); + R visit(TinyIntType tinyIntType); + R visit(LogicalType other); } diff --git a/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/TinyIntType.java b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/TinyIntType.java new file mode 100644 index 0000000..d42bcef --- /dev/null +++ b/flink-table/flink-table-common/src/main/java/org/apache/flink/table/types/logical/TinyIntType.java @@ -0,0 +1,91 @@ +/* + * 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.flink.table.types.logical; + +import org.apache.flink.annotation.PublicEvolving; + +import java.util.Collections; +import java.util.List; +import java.util.Set; + +/** + * Logical type of a 1-byte signed integer with values from -128 to 127. + * + * <p>The serialized string representation is {@code TINYINT}. + */ +@PublicEvolving +public final class TinyIntType extends LogicalType { + + private static final String FORMAT = "TINYINT"; + + private static final Set<String> NULL_OUTPUT_CONVERSION = conversionSet( + Byte.class.getName()); + + private static final Set<String> NOT_NULL_INPUT_OUTPUT_CONVERSION = conversionSet( + Byte.class.getName(), + byte.class.getName()); + + private static final Class<?> DEFAULT_CONVERSION = Byte.class; + + public TinyIntType(boolean isNullable) { + super(isNullable, LogicalTypeRoot.TINYINT); + } + + public TinyIntType() { + this(true); + } + + @Override + public LogicalType copy(boolean isNullable) { + return new TinyIntType(isNullable); + } + + @Override + public String asSerializableString() { + return withNullability(FORMAT); + } + + @Override + public boolean supportsInputConversion(Class<?> clazz) { + return NOT_NULL_INPUT_OUTPUT_CONVERSION.contains(clazz.getName()); + } + + @Override + public boolean supportsOutputConversion(Class<?> clazz) { + if (isNullable()) { + return NULL_OUTPUT_CONVERSION.contains(clazz.getName()); + } + return NOT_NULL_INPUT_OUTPUT_CONVERSION.contains(clazz.getName()); + } + + @Override + public Class<?> getDefaultConversion() { + return DEFAULT_CONVERSION; + } + + @Override + public List<LogicalType> getChildren() { + return Collections.emptyList(); + } + + @Override + public <R> R accept(LogicalTypeVisitor<R> visitor) { + return visitor.visit(this); + } +} diff --git a/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypesTest.java b/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypesTest.java index def5d76..7bc90f0 100644 --- a/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypesTest.java +++ b/flink-table/flink-table-common/src/test/java/org/apache/flink/table/types/LogicalTypesTest.java @@ -23,6 +23,7 @@ import org.apache.flink.table.types.logical.BooleanType; import org.apache.flink.table.types.logical.CharType; import org.apache.flink.table.types.logical.DecimalType; import org.apache.flink.table.types.logical.LogicalType; +import org.apache.flink.table.types.logical.TinyIntType; import org.apache.flink.table.types.logical.VarBinaryType; import org.apache.flink.table.types.logical.VarCharType; import org.apache.flink.util.InstantiationUtil; @@ -121,6 +122,19 @@ public class LogicalTypesTest { ); } + @Test + public void testTinyIntType() { + testAll( + new TinyIntType(), + "TINYINT", + "TINYINT", + new Class[]{Byte.class, byte.class}, + new Class[]{Byte.class}, + new LogicalType[]{}, + new TinyIntType(false) + ); + } + // -------------------------------------------------------------------------------------------- private static void testAll(