Re: [pgsql-fr-generale] Problème pour surcharger la fonction substring

From: Cédric Villemain <cedric(dot)villemain(dot)debian(at)gmail(dot)com>
To: Marc Cousin <cousinmarc(at)gmail(dot)com>
Cc: Guillaume Lelarge <guillaume(at)lelarge(dot)info>, "Delorme, Yann" <Yann(dot)Delorme(at)esker(dot)fr>, "pgsql-fr-generale(at)postgresql(dot)org" <pgsql-fr-generale(at)postgresql(dot)org>
Subject: Re: [pgsql-fr-generale] Problème pour surcharger la fonction substring
Date: 2011-04-20 14:06:05
Message-ID: BANLkTikJfEon9+OU3A5-6wXQ4ab1KUnNSw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Le 20 avril 2011 14:42, Marc Cousin <cousinmarc(at)gmail(dot)com> a écrit :
> Le mercredi 20 avril 2011 à 14:36 +0200, Guillaume Lelarge a écrit :
>> Le 20/04/2011 14:04, Delorme, Yann a écrit :
>> > [...]
>> > Poutant la doc semble claire.
>> >
>> > 18.10.1. Comportement des instructions
>> >
>> >         Le schéma du catalogue système, pg_catalog, est toujours parcouru, qu'il soit ou non mentionné dans le chemin. Mentionné,
>> >         il est alors parcouru dans l'ordre indiqué. Dans le cas contraire, il est parcouru avant tout autre élément du chemin.
>> >
>>
>> En effet, erreur de ma part :)
>>
>> J'ai essayé avec substring, j'ai le même problème que vous. Ça
>> fonctionne pourtant avec une procédure comme version().
>>
>
> En fait substring, c'est un des cas un peu à part dans le monde des
> fonctions, parce que c'est une de celles qui ont potentiellement une
> syntaxe «à la con»:
> substring(A FROM B FOR C) ou substring (A,B,C).
>
> Ce qui lui vaut d'être traitée comme un cas particulier par l'analyseur
> SQL (la grammaire bison). Qui pointe en dur vers la fonction du même
> type dans le catalogue pg_catalog. Conclusion, ça marche avec à peu près
> n'importe quelle fonction (même système), sauf ces cas particuliers :)
> Avec version, évidemment, qui a une syntaxe propre, ça passe tout seul.

Subtilité numéro 2: (protection du nom de la fonction)
cedric=# select "substring"(now()::timestamp without time zone,1,7);
substring
-----------
2011-04
(1 ligne)

cedric=# select "substring"('now()::timestamp without time zone',1,7);
substring
-----------
now()::
(1 ligne)

--
Cédric Villemain               2ndQuadrant
http://2ndQuadrant.fr/     PostgreSQL : Expertise, Formation et Support

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Jean-Paul Argudo 2011-05-02 15:24:32 Re: Solutions Linux 2011
Previous Message Marc Cousin 2011-04-20 12:42:13 Re: Problème pour surcharger la fonction substring