RussellSpitzer commented on code in PR #15994: URL: https://github.com/apache/iceberg/pull/15994#discussion_r3202320299
########## api/src/main/java/org/apache/iceberg/udf/UdfType.java: ########## @@ -0,0 +1,69 @@ +/* + * 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.iceberg.udf; + +/** + * Represents a UDF data type as defined in the UDF spec. UDF types are based on Iceberg types but + * intentionally omit field IDs and element nullability. Implementations include {@link + * UdfPrimitiveType} for primitive and semi-structured types, and the nested types {@link + * UdfListType}, {@link UdfMapType}, and {@link UdfStructType}. + */ +public interface UdfType { Review Comment: Organization suggestion - I feel like we have a lot of small class files here and there are a few ways to make it cleaner Option 1, make a type package put all the files in there Option 2 (or option 1 extension) - Follow the Iceberg Types model with UdfType Interfaces and UdfTypes Concerete Implemetnations I would probably suggest doing both, but just option 2 is probably fine. --- How Types is set up ```java // Type.java — the interface public interface Type extends Serializable { enum TypeID { BOOLEAN, INTEGER, ... STRUCT, LIST, MAP, VARIANT } TypeID typeId(); default boolean isPrimitiveType() { ... } default boolean isStructType() { ... } // ... abstract class PrimitiveType implements Type { ... } abstract class NestedType implements Type { ... } } ``` ```java // Types.java — ALL concrete implementations as static nested classes in ONE file public class Types { private Types() {} // Primitives public static class BooleanType extends PrimitiveType { ... } public static class IntegerType extends PrimitiveType { ... } public static class StringType extends PrimitiveType { ... } public static class DecimalType extends PrimitiveType { ... } // ... ~15 more primitives ... // Field (equivalent to UdfFieldType) public static class NestedField implements Serializable { public static NestedField optional(int id, String name, Type type) { ... } public static NestedField required(int id, String name, Type type) { ... } // ... } // Nested types public static class StructType extends NestedType { public static StructType of(NestedField... fields) { ... } // ... } public static class ListType extends NestedType { public static ListType ofOptional(int elementId, Type elementType) { ... } // ... } public static class MapType extends NestedType { public static MapType ofOptional(int keyId, int valueId, Type keyType, Type valueType) { ... } // ... } } ``` -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: [email protected] For queries about this service, please contact Infrastructure at: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
