Nouvelles fonctions SQL : GREATEST_IGNORE_NULLS et LEAST_IGNORE_NULLS peuvent entrer en conflit avec des UDFs nommées de la même manière

Attention

Ce changement de comportement est présent dans le bundle 2024_03.

Pour connaître le statut actuel du bundle, reportez-vous à Historique du bundle.

Snowflake introduit deux nouvelles fonctions intégrées :

  • GREATEST_IGNORE_NULLS : renvoie la plus grande valeur non NULL d’une liste d’expressions. Si toutes les valeurs des arguments sont NULLs, le résultat est NULL.

    GREATEST_IGNORE_NULLS prend en charge les arguments de tous les types de données, y compris VARIANT.

  • LEAST_IGNORE_NULLS : renvoie la plus petite valeur non NULL d’une liste d’expressions. Si toutes les valeurs des arguments sont NULLs, le résultat est NULL.

    LEAST_IGNORE_NULLS prend en charge les arguments de tous les types de données, y compris VARIANT.

Si vous avez une fonction définie par l’utilisateur (UDF) nommée LEAST_IGNORE_NULLS ou GREATEST_IGNORE_NULLS, les appels à votre fonction ont l’effet suivant :

Avant la modification:

Un appel à votre UDF nommée GREATEST_IGNORE_NULLS ou LEAST_IGNORE_NULLS se résout en votre UDF.

Après la modification:

Un appel à votre UDF nommée GREATEST_IGNORE_NULLS ou LEAST_IGNORE_NULLS se résout à la nouvelle fonction intégrée GREATEST_IGNORE_NULLS ou LEAST_IGNORE_NULLS. La fonction GREATEST_IGNORE_NULLS ou LEAST_IGNORE_NULLS intégrée peut fonctionner différemment de votre UDF.

Si la sémantique documentée de la nouvelle fonction GREATEST_IGNORE_NULLS ou LEAST_IGNORE_NULLS intégrée ne correspond pas à la sémantique de votre UDF, vous pouvez soit :

  • Renommer votre UDF (en utilisant ALTER FUNCTION … RENAME TO …) et remplacer toutes les références au nom de l’UDF d’origine par le nouveau nom.

  • Qualifier complètement toutes les références à vos UDF en spécifiant les noms de la base de données et du schéma contenant les UDF. Par exemple :

    SELECT my_database.my_schema.greatest_ignore_nulls(...);
    
    SELECT my_database.my_schema.least_ignore_nulls(...);
    
    Copy

Réf : 1354