Github user cloud-fan commented on a diff in the pull request:

    https://github.com/apache/spark/pull/21306#discussion_r199992550
  
    --- Diff: 
sql/core/src/main/java/org/apache/spark/sql/sources/v2/catalog/TableChange.java 
---
    @@ -0,0 +1,173 @@
    +/*
    + * 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.sources.v2.catalog;
    +
    +import org.apache.spark.sql.types.DataType;
    +
    +/**
    + * TableChange subclasses represent requested changes to a table. These 
are passed to
    + * {@link DataSourceCatalog#alterTable}.
    + */
    +public interface TableChange {
    +
    +  /**
    +   * Create a TableChange for adding a top-level column to a table.
    +   * <p>
    +   * Because "." may be interpreted as a field path separator or may be 
used in field names, it is
    +   * not allowed in names passed to this method. To add to nested types or 
to add fields with
    +   * names that contain ".", use {@link #addColumn(String, String, 
DataType)}.
    +   *
    +   * @param name the new top-level column name
    +   * @param dataType the new column's data type
    +   * @return a TableChange for the addition
    +   */
    +  static TableChange addColumn(String name, DataType dataType) {
    +    return new AddColumn(null, name, dataType);
    +  }
    +
    +  /**
    +   * Create a TableChange for adding a nested column to a table.
    +   * <p>
    +   * The parent name is used to find the parent struct type where the 
nested field will be added.
    +   * If the parent name is null, the new column will be added to the root 
as a top-level column.
    +   * If parent identifies a struct, a new column is added to that struct. 
If it identifies a list,
    +   * the column is added to the list element struct, and if it identifies 
a map, the new column is
    +   * added to the map's value struct.
    +   * <p>
    +   * The given name is used to name the new column and names containing 
"." are not handled
    +   * differently.
    +   *
    +   * @param parent the new field's parent
    +   * @param name the new field name
    +   * @param dataType the new field's data type
    +   * @return a TableChange for the addition
    +   */
    +  static TableChange addColumn(String parent, String name, DataType 
dataType) {
    +    return new AddColumn(parent, name, dataType);
    +  }
    +
    +  /**
    +   * Create a TableChange for renaming a field.
    +   * <p>
    +   * The name is used to find the field to rename. The new name will 
replace the name of the type.
    +   * For example, renameColumn("a.b.c", "x") should produce column a.b.x.
    --- End diff --
    
    It's great to have an example to show how to use this API, can we add an 
example to all the methods here?


---

---------------------------------------------------------------------
To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org
For additional commands, e-mail: reviews-h...@spark.apache.org

Reply via email to