Udostępnij za pośrednictwem


Rozpoznawanie przeciążenia funkcji (Entity SQL)

W tym temacie opisano sposób rozwiązywania funkcji Entity SQL.

Można zdefiniować więcej niż jedną funkcję o tej samej nazwie, o ile funkcje mają unikatowe podpisy.

W takim przypadku należy zastosować następujące kryteria, aby określić, do której funkcji odwołuje się dany wyrażenie. Te kryteria są stosowane w sekwencji. Pierwszym kryterium, które ma zastosowanie tylko do pojedynczej funkcji, jest rozwiązana funkcja.

  1. Numer parametru. Funkcja ma taką samą liczbę parametrów określonych w wyrażeniu.

  2. Dokładne dopasowanie dla typu. Każdy typ argumentu funkcji dokładnie odpowiada typowi parametru lub jest literałem null.

  3. Dopasuj podtyp. Każdy typ argumentu funkcji dokładnie pasuje lub jest podtypem typu parametru lub argumentem jest literał null. W przypadku, gdy kilka funkcji różni się tylko w liczbie wymaganych konwersji podtypów, funkcja z najmniejszą liczbą konwersji podtypów jest rozpoznaną funkcją.

  4. Dopasuj podtyp lub podtyp promocji typu. Każdy typ argumentu funkcji dokładnie pasuje, jest podtypem lub może być podwyższony do typu parametru lub argument jest literałem null. Ponownie, w przypadku, gdy kilka funkcji różni się tylko w liczbie konwersji podtypów i promocji, funkcja z najmniejszą liczbą konwersji podtypów i promocji jest rozwiązaną funkcją.

Jeśli żadna z tych kryteriów nie spowoduje wybrania pojedynczej funkcji, wyrażenie wywołania funkcji jest niejednoznaczne.

Nawet jeśli można wyodrębnić jedną funkcję przy użyciu tych reguł, argumenty nadal mogą nie być zgodne z parametrami. W tym przypadku jest zgłaszany błąd.

W przypadku funkcji zdefiniowanych przez użytkownika definicja funkcji zapytania wbudowanego ma pierwszeństwo nawet wtedy, gdy istnieje funkcja zdefiniowana przez model z podpisem, który jest lepszym dopasowaniem dla funkcji zdefiniowanej przez użytkownika.

Zobacz też