Dela via


Lösning för överbelastning av funktioner (entitets-SQL)

Det här avsnittet beskriver hur entitets-SQL-funktioner löses.

Fler än en funktion kan definieras med samma namn, så länge funktionerna har unika signaturer.

När så är fallet måste följande villkor tillämpas för att avgöra vilken funktion som refereras av ett visst uttryck. Dessa kriterier tillämpas i följd. Det första villkoret som endast gäller för en enskild funktion är den lösta funktionen.

  1. Parameternummer. Funktionen har samma antal parametrar som anges i uttrycket.

  2. Exakt matchning efter typ. Varje argumenttyp för funktionen matchar exakt parametertypen eller är nullliteralen.

  3. Matcha på undertyp. Varje argumenttyp för funktionen matchar exakt eller är en undertyp av parametertypen, eller så är argumentet nullliteralen. Om flera funktioner bara skiljer sig åt i antalet konverteringar av undertyp som krävs är funktionen med minst antal konverteringar av undertyp den lösta funktionen.

  4. Matcha på undertyp eller typhöjning. Varje argumenttyp för funktionen matchar exakt, är en undertyp av eller kan höjas till parametertypen eller argumentet är nullliteralen. Om flera funktioner bara skiljer sig åt i antalet konverteringar och kampanjer av undertyp är funktionen med minst antal konverteringar och kampanjer av undertyp den lösta funktionen.

Om inget av dessa villkor resulterar i att en enskild funktion väljs är funktionsanropsuttrycket tvetydigt.

Även om en enskild funktion kan extraheras med hjälp av dessa regler kanske argumenten fortfarande inte matchar parametrarna. Ett fel uppstår i det här fallet.

För användardefinierade funktioner har definitionen för en infogad frågefunktion företräde även när det finns en modelldefinierad funktion med en signatur som är en bättre matchning för den användardefinierade funktionen.

Se även