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]

Reply via email to