FR 3082972 A1 20191227 FR 1855695 A 20180626 La présente invention concerne un pré-compilateur, un système de développement d'un programme, un procédé de pré-compilation et un programme d'ordinateur correspondant. L'invention s'applique plus particulièrement à un pré-compilateur du type conçu pour : - analyser un code source comportant du code principal écrit dans un langage informatique principal et au moins un bloc de code écrit dans un autre langage informatique embarqué dans le code principal, et remplacer chaque bloc de code embarqué par du code de remplacement dans le langage informatique principal. Par exemple, la société MICROFOCUS commercialise une suite logicielle comportant un pré-compilateur (également appelé « pré-processeur ») appelé Open ESQL du type précité, dans lequel le langage informatique principal est le langage COBOL et chaque bloc de code embarqué est une instruction SQL embarquée, de laquelle une instruction SQL à destination d'une base de données est destinée à être déduite. Or, les bases de données Oracle supportent les variables d'indicateur (de l'anglais « indicator variables »). Une variable d'indicateur est une variable ajoutée à la suite d'une variable principale, après le signe « : », et indiquant le nombre de premiers caractères de la variable principale qui sont utilisés. Ainsi, si la variable principale peut contenir 32 caractères mais que seuls les 10 premiers sont utilisés (les autres étant par exemple des espaces), la variable d'indicateur aura la valeur 10. Cela permet à la base de données de n'utiliser qu'une variable de longueur 10 pour stocker la variable principale. Il peut être souhaité de prévoir un pré-compilateur qui permette d'utiliser les variables d'indicateur pour n'importe quel type de base de données. L'invention a donc pour objet un pré-compilateur du type précité, caractérisé en ce qu'il est en outre conçu pour : - rechercher, dans le ou les blocs de code embarqué, une expression comportant : - une variable principale destinée à contenir une chaîne de caractères, - une variable d'indicateur destinée à contenir un nombre entier, et - un ou plusieurs caractères prédéfinis d'association des variables principale et d'indicateur, et 2 remplacer chaque expression trouvée par du code dans le langage informatique principal fournissant les N premiers caractères de la première variable, N étant la valeur de la variable d'indicateur. Grâce à l'invention, l'expression de variable d'indicateur est remplacée par du 5 code dans le langage principale permettant l'utilisation de la variable d'indicateur par n'importe quelle base de données. De façon optionnelle chaque expression recherchée est de la forme A:B, où A est la variable principale et B la variable d'indicateur. De façon optionnelle également, le code fournissant les N premiers caractères 10 de la variable principale est de la forme A(1 B), où A est la variable principale et B est la variable d'indicateur. De façon optionnelle également, le pré-compilateur est en outre conçu pour, avant la recherche dans le ou les blocs de code embarqué de l'expression : rechercher, dans le ou les blocs de code embarqué, une variable définie 15 dans le code dans le langage informatique comme étant de longueur variable, remplacer chaque variable de longueur variable trouvée par une expression de variable d'indicateur comportant : - une variable principale destinée à contenir une chaîne de caractères, 20 - une variable d'indicateur destinée à contenir un nombre entier, et - le ou les caractères prédéfinis d'association des variables principale et d'indicateur. De façon optionnelle également, le pré-compilateur est conçu pour détecter la présence d'un mot-clé prédéfini dans une définition d'une variable pour déterminer 25 que cette variable est de longueur variable. De façon optionnelle également, le langage informatique principal est le langage COBOL. De façon optionnelle également, chaque bloc de code embarqué est une instruction SQL embarquée. 30 L'invention a également pour objet un système de développement d'un programme destiné à communiquer avec un ensemble d'au moins une base de données chacune conçue pour recevoir des instructions SQL, comportant : - une interface destinée à être connectée à chaque base de données de l'ensemble, une bibliothèque logicielle, 3 - un pré-compilateur selon l'invention, dans lequel le code de remplacement comporte un appel à une routine de la bibliothèque logicielle passant à la routine une instruction issue du bloc de code embarqué, afin de fournir un code source pré-compilé, 5 dans lequel le code source pré-compilé est destiné à être compilé par un compilateur pour fournir un programme exécutable comportant le ou les appels à la routine, dans lequel le programme exécutable et la routine appelée sont destinés à être exécutés par un dispositif informatique, dans lequel la routine appelée est conçue pour envoyer à l'interface un message 10 comportant l'instruction passée avec l'appel, et dans lequel l'interface est conçue pour relayer, en tant qu'instruction SQL, l'instruction d'au moins un du ou des messages reçus à au moins une base de données de l'ensemble. De façon optionnelle, l'interface est un serveur destiné à être connectée à un 15 réseau informatique auquel le dispositif informatique est connecté et dont la routine est un client. De façon optionnelle également, l'interface est conçue pour : - tenir une liste de la ou des bases données de l'ensemble à chacune desquelles l'interface a relayé une instruction d'un du ou des messages 20 reçus de la part de la routine, demandant un accès à cette base de données, analyser chaque message reçu de la routine pour déterminer si l'instruction de ce message est une instruction prédéfinie, et si l'instruction de ce message est l'instruction prédéfinie, mettre en oeuvre 25 une procédure de consignation de la ou des bases de données de la liste. De façon optionnelle également, l'interface est conçue pour : - analyser chaque message reçu de la part de la routine et déterminer si ce message comporte, en plus de l'instruction, un nombre représentant un nombre maximal de résultats, 30 relayer, en tant qu'instruction SQL, l'instruction du message reçu à une base de données de l'ensemble, recevoir de la part de cette base de données une réponse à l'instruction SQL comportant des résultats, filtrer les résultats pour ne garder que le nombre maximal de résultats, et 4 envoyer à la routine, à la place de la réponse reçue, une réponse de remplacement comportant uniquement les résultats filtrés. L'invention a également pour objet un procédé de pré-compilation comportant : 5 - l'analyse d'un code source comportant du code principal écrit dans un langage informatique principal et au moins un bloc de code écrit dans un autre langage informatique embarqué dans le code principal, et le remplacement de chaque bloc de code embarqué par du code de remplacement dans le langage informatique principal, 10 caractérisé en ce qu'il comporte en outre : - la recherche, dans le ou les blocs de code embarqué, d'une expression comportant : - une variable principale destinée à contenir une chaîne de caractères, - une variable d'indicateur destinée à contenir un nombre entier, et 15 - un ou plusieurs caractères prédéfinis d'association des variables principale et d'indicateur, et le remplacement de chaque expression trouvée par du code dans le langage informatique principal fournissant les N premiers caractères de la première variable, N étant la valeur de la variable d'indicateur. 20 L'invention a également pour objet un programme d'ordinateur téléchargeable depuis un réseau de communication et/ou enregistré sur un support lisible par ordinateur et/ou exécutable par un processeur, caractérisé en ce qu'il comprend des instructions pour l'exécution des étapes d'un procédé de pré-compilation selon l'invention, lorsque ledit programme est exécuté sur un ordinateur. 25 L'invention sera mieux comprise à l'aide de la description qui va suivre, donnée uniquement à titre d'exemple et faite en se référant aux dessins annexés dans lesquels : - la figure 1 représente schématiquement la structure générale d'une installation informatique, selon un mode de réalisation de l'invention, et 30 la figure 2 illustre les étapes successives d'un procédé de développement et d'utilisation d'un programme destiné à communiquer avec un ensemble de bases de données, selon un mode de réalisation de l'invention. En référence à la figure 1, une installation informatique 100 mettant en oeuvre l'invention va à présent être décrite. 5 L'installation informatique 100 comporte un ensemble d'au moins une base de données, désignée(s) individuellement et collectivement par la référence 102, et un système de communication avec la ou les bases de données 102. Dans la présente description, le terme « base de données » regroupe non 5 seulement la structure informatique contenant les données, mais également le système de gestion de base de données permettant de manipuler cette structure. Chaque base de données 102 est conçue pour recevoir des instructions SQL (de l'anglais « Structured Query Langage »). Chaque base de données est par exemple de l'un des types suivants : PostgreSQL, Oracle, MySQL, SQL Server, DB2. 10 Le système de communication avec la ou les bases de données 102 comporte des premier et deuxième dispositifs informatiques 106, 108, ainsi qu'un réseau informatique 110 auquel les premier et deuxième dispositifs informatiques 106, 108 sont connectés, pour leur permettre d'échanger des données. Le réseau informatique 110 est par exemple un réseau TCP/IP. En particulier, les premier et deuxième 15 dispositifs informatiques 106, 108 présentent des adresses respectives dans ce réseau informatique 110. Le premier dispositif informatique 106 comporte une unité centrale de traitement 112, telle qu'un microprocesseur, et une mémoire 114 dans laquelle sont enregistrés un code source 116, une bibliothèque logicielle 118 comportant au moins 20 une routine, dite de communication, un pré-compilateur 120 (également appelé « préprocesseur ») et un compilateur 122. Le code source 116 comporte du code en langage COBOL et au moins une instruction SQL embarquée (de l'anglais « Embedded SQL »). Chaque instruction SQL embarquée est destinée à générer une instruction SQL transmise à au moins 25 une base de données 102 de l'ensemble. Dans le cas le plus simple, l'instruction SQL est identique à l'instruction SQL embarquée. Le pré-compilateur 120 est par exemple écrit en langage C et peut être utilisé sur tout dispositif informatique comportant un compilateur COBOL. Dans l'exemple décrit, le premier dispositif informatique 106 est un ordinateur 30 central (« mainframe » en anglais) utilisant un système d'exploitation de la famille GCOS (de l'anglais « General Comprehensive Operating System »), par exemple le système d'exploitation GCOS 7. Le deuxième dispositif informatique 108 comporte une unité centrale de traitement 124, telle qu'un microprocesseur, et une mémoire 126 dans laquelle sont 35 enregistrés une machine virtuelle 128 (une machine virtuelle Java dans l'exemple 6 décrit), une interface 130 destinée à être exécutée dans la machine virtuelle 128, et une bibliothèque logicielle 132 également destinée à être exécutée dans la machine virtuelle 128, sur appel de l'interface 130. L'interface 130 est ainsi écrite en langage Java et utilise la bibliothèque logicielle 132 (dans l'exemple décrit, la bibliothèque 5 JDBC de l'anglais REVENDICATIONS1. Pré-compilateur (120) conçu pour : - analyser un code source (116) comportant du code principal écrit dans un langage informatique principal et au moins un bloc de code écrit dans un autre langage informatique embarqué dans le code principal, et remplacer chaque bloc de code embarqué par du code de remplacement dans le langage informatique principal, caractérisé en ce qu'il est en outre conçu pour : - rechercher, dans le ou les blocs de code embarqué, une expression comportant : - une variable principale destinée à contenir une chaîne de caractères, - une variable d'indicateur destinée à contenir un nombre enfler, et - un ou plusieurs caractères prédéfinis d'association des variables principale et d'indicateur, et remplacer chaque expression trouvée par du code dans le langage informatique principal fournissant les N premiers caractères de la première variable, N étant la valeur de la variable d'indicateur. 2. Pré-compilateur (120) selon la revendication 1, dans lequel chaque les N premiers caractères de la variable principale est de la forme A(1 B), variable principale et B est la variable d'indicateur. Pré-compilateur (120) selon l'une quelconque des revendications 1 à 3, I le pré-compilateur (120) est en outre conçu pour, avant la recherche les blocs de code embarqué de l'expression : recherchée est de la forme A:B, où A est la variable principale et B la ndicateur. Pré-compilateur (120) selon la revendication 1 ou 2, dans lequel le code - rechercher, dans le ou les blocs de code embarqué, une variable définie dans le code dans le langage informatique comme étant de longueur variable, remplacer chaque variable de longueur variable trouvée par une expression de variable d'indicateur comportant : expression variable di 3. où A est la 4. dans leque dans le ou fournissant 17 - une variable principale destinée à contenir une chaîne de caractères, - une variable d'indicateur destinée à contenir un nombre entier, et - le ou les caractères prédéfinis d'association des variables 5 principale et d'indicateur. 5. Pré-compilateur (120) selon la revendication 4, dans lequel le pré-compilateur (120) est conçu pour détecter la présence d'un mot-clé prédéfini dans une définition d'une variable pour déterminer que cette variable est de longueur variable. 10 6. Pré-compilateur (120) selon l'une quelconque des revendications 1 à 5, dans lequel le langage informatique principal est le langage COBOL. 7. Pré-compilateur (120) selon l'une quelconque des revendications 1 à 6, dans lequel chaque bloc de code embarqué est une instruction SQL embarquée. 8. Système de développement d'un programme destiné à communiquer 15 avec un ensemble d'au moins une base de données (102) chacune conçue pour recevoir des instructions SQL, comportant : une interface (130) destinée à être connectée à chaque base de données (102) de l'ensemble, une bibliothèque logicielle (118), 20 un pré-compilateur (120) selon l'une quelconque des revendications 1 à 7, dans lequel le code de remplacement comporte un appel à une routine de la bibliothèque logicielle (118) passant à la routine une instruction issue du bloc de code embarqué, afin de fournir un code source pré-compilé, 25 dans lequel le code source pré-compilé est destiné à être compilé par un compilateur (122) pour fournir un programme exécutable comportant le ou les appels à la routine, dans lequel le programme exécutable et la routine appelée sont destinés à être exécutés par un dispositif informatique (106), dans lequel la routine appelée est conçue pour envoyer à l'interface (130) un 30 message comportant l'instruction passée avec l'appel, et dans lequel l'interface (130) est conçue pour relayer, en tant qu'instruction SQL, l'instruction d'au moins un du ou des messages reçus à au moins une base de données (102) de l'ensemble. 18 9. Système selon la revendication 8, dans lequel l'interface (130) est un serveur destiné à être connectée à un réseau informatique (110) auquel le dispositif informatique (106) est connecté et dont la routine est un client. 10. Système selon la revendication 8 ou 9, dans lequel l'interface (130) est 5 conçue pour : tenir une liste de la ou des bases données (102) de l'ensemble à chacune desquelles l'interface (130) a relayé une instruction d'un du ou des messages reçus de la part de la routine, demandant un accès à cette base de données, 10 analyser chaque message reçu de la routine pour déterminer si l'instruction de ce message est une instruction prédéfinie, et si l'instruction de ce message est l'instruction prédéfinie, mettre en oeuvre une procédure de consignation de la ou des bases de données de la liste. 15 11. Système selon l'une quelconque des revendications 8 à 10, dans lequel l'interface (130) est conçue pour : analyser chaque message reçu de la part de la routine et déterminer si ce message comporte, en plus de l'instruction, un nombre représentant un nombre maximal de résultats, 20 relayer, en tant qu'instruction SQL, l'instruction du message reçu à une base de données (102) de l'ensemble, recevoir de la part de cette base de données (102) une réponse à l'instruction SQL comportant des résultats, filtrer les résultats pour ne garder que le nombre maximal de 25 résultats, et envoyer à la routine, à la place de la réponse reçue, une réponse de remplacement comportant uniquement les résultats filtrés. 12. Procédé de pré-compilation comportant : l'analyse d'un code source (116) comportant du code principal écrit 30 dans un langage informatique principal et au moins un bloc de code écrit dans un autre langage informatique embarqué dans le code principal, et le remplacement de chaque bloc de code embarqué par du code de remplacement dans le langage informatique principal, caractérisé en ce qu'il comporte en outre : 19 la recherche, dans le ou les blocs de code embarqué, d'une expression comportant : - une variable principale destinée à contenir une chaîne de caractères, 5 - une variable d'indicateur destinée à contenir un nombre entier, et - un ou plusieurs caractères prédéfinis d'association des variables principale et d'indicateur, et le remplacement de chaque expression trouvée par du code dans le langage informatique principal fournissant les N premiers caractères 10 de la première variable, N étant la valeur de la variable d'indicateur. 13. Programme d'ordinateur téléchargeable depuis un réseau de communication et/ou enregistré sur un support lisible par ordinateur et/ou exécutable par un processeur, caractérisé en ce qu'il comprend des instructions pour l'exécution des étapes d'un procédé de pré-compilation selon la revendication 12, lorsque ledit 15 programme est exécuté sur un ordinateur.