danielcweeks commented on code in PR #16652:
URL: https://github.com/apache/iceberg/pull/16652#discussion_r3351460003


##########
format/expressions-spec.md:
##########
@@ -0,0 +1,284 @@
+---
+title: "Expressions Spec"
+---
+<!--
+ - 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.
+ -->
+
+# Iceberg Expressions
+
+This document defines the structure and behavior of expressions for use in 
Iceberg specifications. The purpose is to define a common structure that 
enables simple expressions to be stored and exchanged.
+
+Stored expressions are needed for use cases like data validations (`CHECK` 
constraints) and default values (for instance, `current_timestamp()`). 
Expressions are exchanged in use cases like server-side scan planning in the 
catalog protocol.
+
+
+## Overview
+
+The goal of this specification is to define a simple expression structure and 
avoid complexity.
+
+To remain simple, the expressions that can be represented are deliberately 
constrained. Value expressions are constants, field references, or function 
calls with value expression arguments. Predicates are comparisons of value 
expressions that produce true or false.
+
+This approach is intended to keep focus on the logical structure of 
expressions. Complexity is pushed to the functions that are called, which can 
be a limited set of well-defined and portable functions (like Iceberg partition 
transforms) or could be user-defined functions that can use the full range of 
SQL capabilities. Multi-dialect UDFs are responsible for any SQL constructs 
that are specific to an engine, rather than importing and duplicating dialects 
in Iceberg expressions.

Review Comment:
   ```suggestion
   This approach is intended to keep focus on the logical structure of 
expressions. Complexity is pushed to the functions that are called, which are 
be a limited set of well-defined and portable functions (like Iceberg partition 
transforms) or user-defined functions that can use the full range of SQL 
capabilities. Multi-dialect UDFs are responsible for any SQL constructs that 
are specific to an engine, rather than importing and duplicating dialects in 
Iceberg expressions.
   ```
   Suggestion: make the language a little less uncertain
   
   If we have a UDF reference this might be a good place to include it.



-- 
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