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

# Changelist for MADlib version 1.9.1 to 1.10

# This file contains all changes that were introduced in a new version of
# MADlib. This changelist is used by the upgrade script to detect what objects
# should be upgraded (while retaining all other objects from the previous version)

# New modules (actually .sql_in files) added in upgrade version
# For these files the sql_in code is retained as is with the functions in the
# file installed on the upgrade version. All other files (that don't have
# updates), are cleaned up to remove object replacements
new module:
    # ----------------- Changes from 1.9.1 to 1.10.0 ----------
    sssp:
    encode_categorical:
    knn:

# Changes in the types (UDT) including removal and modification
udt:

    # ----------------- Changes from 1.9.1 to 1.10.0 ----------
    kmeans_result:
    kmeans_state:

# List of the UDF changes that affect the user externally. This includes change
# in function name, return type, argument order or types, or removal of
# the function. In each case, the original function is as good as removed and a
# new function is created. In such cases, we should abort the upgrade if there
# are user views dependent on this function, since the original function will
# not be present in the upgraded version.
udf:

    # ----------------- Changes from 1.9.1 to 1.10.0 ----------
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, double precision[], character varying, character varying, integer, double precision
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, double precision[], character varying, character varying, integer
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, double precision[], character varying, character varying
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, double precision[], character varying
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, double precision[]
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, character varying, character varying, character varying, character varying, integer, double precision
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, character varying, character varying, character varying, character varying, integer
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, character varying, character varying, character varying, character varying
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, character varying, character varying, character varying
    - kmeans:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, character varying, character varying
    - kmeanspp:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying, character varying, integer, double precision, double precision
    - kmeanspp:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying, character varying, integer, double precision
    - kmeanspp:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying, character varying, integer
    - kmeanspp:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying, character varying
    - kmeanspp:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying
    - kmeanspp:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer
    - kmeans_random:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying, character varying, integer, double precision
    - kmeans_random:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying, character varying, integer
    - kmeans_random:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying, character varying
    - kmeans_random:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer, character varying
    - kmeans_random:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, integer
    - internal_execute_using_kmeans_args:
        rettype: schema_madlib.kmeans_result
        argument: character varying, character varying, character varying, character varying, character varying, integer, double precision

# Changes to aggregates (UDA) including removal and modification
# Overloaded functions should be mentioned separately
uda:

# Casts (UDC) updated/removed
udc:

# Operators (UDO) removed/updated
udo:

# Operator Classes (UDOC) removed/updated
udoc:
