Aller au contenu

[end] Mettre du SQL "embedded in C" dans une macro


chaps

Messages recommandés

Bonjour à tous !

Ma question est la suivante, est-il possible d'écrire un code de ce genre là en Pro*C :

#include <stdio.h>
#include <stdlib.h>

#define plop(x) EXEC SQL DECLARE Curs_ ## x CURSOR FOR\
			   SELECT tutu\
			   FROM tata\
			   WHERE titi = "tete"\
			   ORDER BY tutu;

int main(void)
{
 printf("Coucou\n");

 plop(toto);

 return 0;
}

Le problème, bien évidemment, c'est que le précompilateur Pro*C passe avant le précompilateur C, et les macro n'ont donc pas encore été traitées à ce moment là. Du coup le précompilateur Pro*C gueule en se demandant ce que vient faire ce EXEC SQL à cet endroit insolite.

J'ai essayé la solution la plus naturelle, à savoir passer un coup de "gcc -E" sur le fichier .pc (en précisant alors à gcc que cette extension doit être gérée comme du C), mais le précompilateur C génère plein de code que n'est pas en mesure de traiter par derrière le précompilateur Pro*C.

Connaissez vous un moyen de précompiler un fichier C en ne traitant que les macros sans tenir compte du reste ? Ou alors une autre idée pour réussir à integrer du code "embedded SQL" dans une macro C ? Je commence à douter que cela soit possible, et je trouve ça vraiment dommage de se priver de ce genre de possibilité :transpi:.

Merci d'avance pour vos idées ;) !

Lien vers le commentaire
Partager sur d’autres sites

J'avais oublié de préciser que la base est déjà existante (c'est une base Oracle), et il n'est pas possible de changer l'architecture. Ce qu'il me faudrait donc, l'idéal, ce serait un mini précompilateur qui remplace uniquement les macros dans le fichier .pc. Je n'ai jamais entendu parler d'un tel précompilateur et mes recherches ne donnent rien, mais on sait jamais, quelqu'un parmis vous a peut-être entendu parler d'un truc du genre...

Lien vers le commentaire
Partager sur d’autres sites

Merci beaucoup uzak, effectivement il est toujours possible de passer par une fonction, et de mettre cette dernière en "inline" si on ne veut pas de perte de performance due à l'ajout d'un appel de fonction. C'est d'ailleurs ce que je vais faire je pense.

Mais j'aurai préféré utiliser une macro si c'était possible, malheureusement apparement non :cartonrouge:...

Lien vers le commentaire
Partager sur d’autres sites

  • 3 semaines après...

De toutes facon, ta macro ou ta fonction inline donneront le même résultat une fois compilées.

Il y'a même un avantage a la fonction inline : Si tu optimise ton executable pour la taille et non pas pour la vitesse, le compilateur ne recopiera plus ta fontion inline et la gèrera comme une fonction normale.

Les paramètres des fonctions étant passés par les registres dans la limite du possible, pas de perte significative, sauf a appeller des millions de fois une procédure d'une ligne...

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...