dtenedor commented on code in PR #40049:
URL: https://github.com/apache/spark/pull/40049#discussion_r1110299640


##########
sql/catalyst/src/main/java/org/apache/spark/sql/connector/catalog/ColumnDefaultValue.java:
##########
@@ -0,0 +1,76 @@
+/*
+ * 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.spark.sql.connector.catalog;
+
+import java.util.Objects;
+import javax.annotation.Nonnull;
+
+import org.apache.spark.sql.connector.expressions.Literal;
+
+/**
+ * A class representing the default value of a column. It contains both the 
SQL string and literal
+ * value of the user-specified default value expression. The SQL string should 
be re-evaluated for
+ * each table writing command, which may produce different values if the 
default value expression is
+ * something like {@code CURRENT_DATE()}. The literal value is used to 
back-fill existing data if
+ * new columns with default value are added. Note: the back-fill can be lazy. 
The data sources can
+ * remember the column default value and let the reader fill the column value 
when reading existing
+ * data that do not have these new columns.
+ */
+public class ColumnDefaultValue {
+  private String sql;
+  private Literal<?> value;

Review Comment:
   Data source developers only have to think about the existence default value. 
For any column where the corresponding field is not present in storage, the 
data source is responsible for filling this in instead of NULL.
   
   On the other hand, the existence default value is for DML only.
   
   For these fields we could clarify with comments, e.g.
   
   ```
     // This is the original string contents of the SQL expression specified at 
the
     // time the column was created in a CREATE TABLE, REPLACE TABLE, or ALTER 
TABLE
     // ADD COLUMN command. For example, for "CREATE TABLE t (col INT DEFAULT 
42)",
     // this field is equal to the string literal "42" (without quotation 
marks).
     private String sql;
     // This is the literal value corresponding to the above SQL string. For 
the above
     // example, this would be a literal integer with a value of 42.
     private Literal<?> value;
   ```



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