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

# The first three assignment expressions are coerced to match
# the corresponding column's type.
[default initial_logical_plan]
update test
set double_col=long_col+1, int_col=1.2, char_col='foo', vchar_col='foofoo'
where int_col+1>long_col
--
ERROR: The assigned value for the column int_col has the type Double, which cannot be safely coerced to the column's type Int NULL (2 : 28)
set double_col=long_col+1, int_col=1.2, char_col='foo', vcha...
                           ^
==

update undefined_table
set int_col=1
--
ERROR: Unrecognized relation undefined_table (1 : 8)
update undefined_table
       ^
==

update test
set undefined_col=1
--
ERROR: Unrecognized attribute undefined_col (2 : 5)
set undefined_col=1
    ^
==

update test
set int_col=1, int_col=1
--
ERROR: Multiple assignments to the column int_col (2 : 16)
set int_col=1, int_col=1
               ^
==

update test
set float_col=int_col+1
--
ERROR: The assigned value for the column float_col has the type Float NULL, which cannot be safely coerced to the column's type Float (2 : 5)
set float_col=int_col+1
    ^
==

update test
set char_col=3
--
ERROR: The assigned value for the column char_col has the type Int, which cannot be safely coerced to the column's type Char(20) (2 : 5)
set char_col=3
    ^
==

# The assignment expression cannot have an aggregate function.
update test set int_col=count(*)+1
--
ERROR: Aggregate function not allowed in SET clause (1 : 25)
update test set int_col=count(*)+1
                        ^
==

# The WHERE cannot have an aggregate function.
update test set int_col=1 where count(*)>1
--
ERROR: Aggregate function not allowed in WHERE clause (1 : 33)
update test set int_col=1 where count(*)>1
                                ^
