[PGSQL/C] Programmation serveur

Programmation serveur [PGSQL/C] - SQL/NoSQL - Programmation

Marsh Posté le 24-03-2005 à 11:37:06    

Bon, je crée un topic car les questions commencent à se cumuler...
Voilà celle du moment:
J'ai une VIEW, sur laquelle je déclare une RULE.
Dans cette dernière, j'aimerai appeller une fonction C, en lui passant le NEW en paramètre afin de faire 2,3 vérifications. Comment je le déclare ce paramètre? (coté C et coté SQL lors du CREATE FUNCTION)

Reply

Marsh Posté le 24-03-2005 à 11:37:06   

Reply

Marsh Posté le 25-03-2005 à 09:56:38    

Toujours pas d'amateurs?

Reply

Marsh Posté le 25-03-2005 à 13:28:43    

bon, d'après ce que tu disais, le NEW est de type RECORD. je te conseillerais bien un truc genre void* mais ça risque de faire désordre :D
sinon, pourquoi tu ne fais pas tes vérifications dans un trigger ?


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-03-2005 à 13:39:33    

Parceque je bosse sur des vues et que les triggers sur les vues ça ne passe pas [:itm]
De mon coté j'avance: la fonction C je la déclare au format V1 (paramètres PG_FUNCTION_ARGS) pour avoir la paix (après on verra pour récupérer ce qu'il faut à grands coups de ciseaux). Coté SQL je déclare la fonction du type "CREATE FONCTION mafonction(mavue) ..." (mavue étant le nom de la vue dont la règle appelle ma fonction).
Donc ça compile, ça s'intalle, mais quand je fais un INSERT dans ma vue il me crache


ERREUR:  Impossible de gérer une référence sur une ligne entière  


[:sisicaivrai]

Reply

Marsh Posté le 25-03-2005 à 13:49:41    

Moktar1er a écrit :

Parceque je bosse sur des vues et que les triggers sur les vues ça ne passe pas [:itm]


 
ah oui merde, faudrait que je lise les topics en entier moi :whistle:
 

Moktar1er a écrit :


De mon coté j'avance: la fonction C je la déclare au format V1 (paramètres PG_FUNCTION_ARGS) pour avoir la paix (après on verra pour récupérer ce qu'il faut à grands coups de ciseaux). Coté SQL je déclare la fonction du type "CREATE FONCTION mafonction(mavue) ..." (mavue étant le nom de la vue dont la règle appelle ma fonction).
Donc ça compile, ça s'intalle, mais quand je fais un INSERT dans ma vue il me crache


ERREUR:  Impossible de gérer une référence sur une ligne entière  


[:sisicaivrai]


ta RULE est correcte, t'as bien fait un truc genre


CREATE RULE theRule AS ON INSERT TO theView DO INSTEAD INSERT INTO table....


?
 
 


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-03-2005 à 14:03:20    

j'ai précisement fait:


CREATE myView AS SELECT * FROM maTable;
CREATE FUNCTION myFunction(myView) AS 'lib.so' LANGUAGE C;
CREATE RULE myRule AS ON INSERT TO myView DO INSTEAD SELECT myFunction(NEW);


Reply

Marsh Posté le 25-03-2005 à 14:13:26    

bon, pour déconner comme ça j'avais déclaré


CREATE FUNCTION myFunction(integer) AS 'lib.so' LANGUAGE C;
CREATE RULE myRule AS ON INSERT TO myView DO INSTEAD SELECT myFunction(NEW);


et il me répond


ERREUR:  La fonction myfunction(myview) n'existe pas
HINT:  Aucune fonction ne correspond au nom donné et aux types d'arguments. Vous devez ajouter des conversions explicites de type.explicit type casts.


Comme quoi il attend bien un paramètre de type myView pour passer NEW...
(notez au passage le magnifique travail de conversion anglais->français des messages d'erreur)

Reply

Marsh Posté le 25-03-2005 à 14:32:11    

ERREUR:  Impossible de gérer une référence sur une ligne entière


Ca veut dire quoi d'abord ça? Qu'il ne sait pas passer un tuple en paramètres? C'est même pas clair leurs erreurs [:sisicaivrai]

Reply

Marsh Posté le 25-03-2005 à 17:42:33    

Moktar1er a écrit :

ERREUR:  Impossible de gérer une référence sur une ligne entière


Ca veut dire quoi d'abord ça? Qu'il ne sait pas passer un tuple en paramètres? C'est même pas clair leurs erreurs [:sisicaivrai]


ben ça me parait clair :/
effectivement on dirait qu'il a du mal avec le NEW en paramètre.
et ta vue ? je suppose qu'elle est constituée d'un SELECT. donc tu peux éventuellement poser un trigger sur la table d'origine (si toutefois c'est une table unique et pas une UNION/Jointure, sinon bonjour la galère :/)


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 25-03-2005 à 19:22:31    

c'est pire que tout ce que tu peux imaginer...

Reply

Marsh Posté le 25-03-2005 à 19:22:31   

Reply

Marsh Posté le 29-03-2005 à 10:33:21    

up au cas où...

Reply

Marsh Posté le 29-03-2005 à 12:37:37    

:spamafote:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 29-03-2005 à 16:44:36    

bon, manifestement, vu qu'a priori il a l'air de se moquer complètement du type que je lui passe en paramètre lors de la déclaration de la fonction en SQL, je suppute que le problème vienne du passage de NEW...
quelqu'un a t'il une idée sur comment passer une ligne en paramètre? (je sens déjà venir les vannes sur ligne->coke->paille)

Reply

Marsh Posté le 05-04-2005 à 17:38:25    

alors les gens? hein? bah quoi? je suis le seul au monde à me poser ces questions là???
plus simplement:
comment je fais pour passer en paramètre, au moment de l'appel, une ligne (genre le resultat d'un select)?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed