Поделиться через


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

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

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

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

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

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

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

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

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

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

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

См. также