[PL/pgsql] Différence entre '=' et ':='

Le
JKB
Bonjour à tous,

Je suis en train d'essayer d'optimiser une requête (postgis) qui
prend plusieurs semaines de temps CPU Je suis tombé sur un truc
bizarre qui apparaît plusieurs fois dans les fonctions PL/pgsql :

pre = '';

pre est ici déclaré comme un varchar. Le problème est simple : les
affectations sont censées être faites à l'aide de l'opérateur ':='.
Pourquoi certaines sont-elles faites à l'aide de '=' et non ':=' ?
Quelle est la subtile différence entre les deux notations ?

Je suis un peu perdu parce que ni le site officiel de pgsql, ni
l'ouvrage de référence que j'ai devant moi, ni même Google ne parle
d'affectation à l'aide du seul signe '='. Pourtant, en tant que
telle, la fonction tourne et le serveur ne se plaint pas

Cordialement,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Sebastien Lardiere
Le #21889331
JKB a écrit :
Bonjour à tous,

Je suis en train d'essayer d'optimiser une requête (postgis) qui
prend plusieurs semaines de temps CPU... Je suis tombé sur un truc
bizarre qui apparaît plusieurs fois dans les fonctions PL/pgsql :

pre = '';

pre est ici déclaré comme un varchar. Le problème est simple : les
affectations sont censées être faites à l'aide de l'opérateur ':='.
Pourquoi certaines sont-elles faites à l'aide de '=' et non ':=' ?
Quelle est la subtile différence entre les deux notations ?

Je suis un peu perdu parce que ni le site officiel de pgsql, ni
l'ouvrage de référence que j'ai devant moi, ni même Google ne parle
d'affectation à l'aide du seul signe '='. Pourtant, en tant que
telle, la fonction tourne et le serveur ne se plaint pas...




Bonjour,

C'est la même chose.

En fait, plpgsql fait un select pour réaliser l'affectation ( select pre
= '' ).

Les opérateurs = et := sont analysés de la même façon, voir
src/pl/plpgsql/src/scan.l dans les sources de PostgreSQL.

Je ne vois donc pas de matiere à optimiser ici.

Cordialement,

--
Sébastien
JKB
Le #21889321
Le 28-02-2008, à propos de
Re: [PL/pgsql] Différence entre '=' et ':=',
Sebastien Lardiere écrivait dans fr.comp.applications.sgbd :
JKB a écrit :
Bonjour à tous,

Je suis en train d'essayer d'optimiser une requête (postgis) qui
prend plusieurs semaines de temps CPU... Je suis tombé sur un truc
bizarre qui apparaît plusieurs fois dans les fonctions PL/pgsql :

pre = '';

pre est ici déclaré comme un varchar. Le problème est simple : les
affectations sont censées être faites à l'aide de l'opérateur ':='.
Pourquoi certaines sont-elles faites à l'aide de '=' et non ':=' ?
Quelle est la subtile différence entre les deux notations ?

Je suis un peu perdu parce que ni le site officiel de pgsql, ni
l'ouvrage de référence que j'ai devant moi, ni même Google ne parle
d'affectation à l'aide du seul signe '='. Pourtant, en tant que
telle, la fonction tourne et le serveur ne se plaint pas...




Bonjour,

C'est la même chose.

En fait, plpgsql fait un select pour réaliser l'affectation ( select pre
= '' ).

Les opérateurs = et := sont analysés de la même façon, voir
src/pl/plpgsql/src/scan.l dans les sources de PostgreSQL.

Je ne vois donc pas de matiere à optimiser ici.



Disons que pour optimiser un bout de code, il vaut mieux le
comprendre et si le type qui a programmé ces fonctions a utilisé de
temps en temps '=' et de temps en temps ':=', il y avait pour moi
une différence entre les deux. Si c'est la même chose, cela
simplifie mon problème. Par contre, il est un peu dommageable que
cela ne figure pas dans les doc où il est indiqué plusieurs fois
qu'il faut _toujours_ utiliser ':='...

Merci,

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
William Marie
Le #21889311
"JKB"

Disons que pour optimiser un bout de code, il vaut mieux le
comprendre et si le type qui a programmé ces fonctions a utilisé de
temps en temps '=' et de temps en temps ':=', il y avait pour moi
une différence entre les deux. Si c'est la même chose, cela
simplifie mon problème. Par contre, il est un peu dommageable que
cela ne figure pas dans les doc où il est indiqué plusieurs fois
qu'il faut _toujours_ utiliser ':='...



Si ma mémoire est bonne l'opérateur ':=' est l'opérateur d'affectation en
Pascal et '=' l'opérateur (booléen) d'égalité. Alors que c'est
respectivement '=' et '==' en C. C'est bien ça ?
--
=================================== William Marie
Attention antiSpam remplacer trapellun.invalid
par free.fr
Web : http://wmarie.free.fr
http://www.pandemonium.dnsalias.org (site expérimental)
====================================
JKB
Le #21889301
Le 28-02-2008, à propos de
Re: [PL/pgsql] Différence entre '=' et ':=',
William Marie écrivait dans fr.comp.applications.sgbd :
"JKB"

Disons que pour optimiser un bout de code, il vaut mieux le
comprendre et si le type qui a programmé ces fonctions a utilisé de
temps en temps '=' et de temps en temps ':=', il y avait pour moi
une différence entre les deux. Si c'est la même chose, cela
simplifie mon problème. Par contre, il est un peu dommageable que
cela ne figure pas dans les doc où il est indiqué plusieurs fois
qu'il faut _toujours_ utiliser ':='...



Si ma mémoire est bonne l'opérateur ':=' est l'opérateur d'affectation en
Pascal et '=' l'opérateur (booléen) d'égalité. Alors que c'est
respectivement '=' et '==' en C. C'est bien ça ?



Oui, et ? ;-)

JKB

--
Le cerveau, c'est un véritable scandale écologique. Il représente 2% de notre
masse corporelle, mais disperse à lui seul 25% de l'énergie que nous
consommons tous les jours.
William Marie
Le #21889291
"JKB"

Oui, et ? ;-)



Peut-être que le codeur de pgsql est un nostalgique du Pascal (jeunesse
!)
--
=================================== William Marie
Attention antiSpam remplacer trapellun.invalid
par free.fr
Web : http://wmarie.free.fr
http://www.pandemonium.dnsalias.org (site expérimental)
====================================
Publicité
Poster une réponse
Anonyme