Разрешение перегруженных функций (язык Entity SQL)

В данном разделе описывается, каким образом разрешаются функции Entity SQL .

С одним именем можно определить более одной функции при условии, что эти функции имеют уникальные сигнатуры.

В этом случае для определения, на какие функции ссылается данное выражение, следует применить следующие критерии. Эти критерии применяются последовательно. Первый критерий, применимый только к одной функции, определяет разрешенную функцию.

  1. Число параметров. Функция имеет то же число параметров, которое указано в выражении.

  2. Точное совпадение типа. Тип каждого аргумента функции точно соответствует типу параметра или является литералом NULL.

  3. Совпадение подтипов. Тип каждого аргумента функции точно соответствует подтипу типа параметра или аргумент является литералом NULL. В случае, если несколько функций отличаются только числом требуемых преобразований подтипа, разрешаемой является функция с наименьшим числом преобразований подтипа.

  4. Совпадение подтипов или повышение типа. Тип каждого аргумента функции точно соответствует, является подтипом или может быть повышен до типа параметра или аргумент является литералом NULL. С другой стороны, в случае, если несколько функций отличаются только числом требуемых преобразований и повышений подтипа, то разрешаемой является функция с наименьшим числом преобразований и повышений подтипа.

Если ни один из этих критериев не позволяет выбрать единственную функцию, то выражение вызова функции неоднозначно.

Даже если с помощью этих правил можно извлечь единственную функцию, аргументы могут не соответствовать параметрам. В этом случае возникает ошибка.

Что касается определяемых пользователем функций, то приоритет имеет определение для встроенной функции запроса, даже если существует функция, определенная в модели, с сигнатурой, которая больше подходит для пользовательской функции.

См. также

Основные понятия

Справочник по Entity SQL
Общие сведения о языке Entity SQL
Функции (язык Entity SQL)