FR 3082971 A1 20191227 FR 1855694 A 20180626 La présente invention concerne un système de développement d'un programme destiné à communiquer avec un ensemble d'au moins une base de données. L'invention s'applique plus particulièrement à un système de développement 5 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, 10 un pré-compilateur conçu pour analyser un code source comportant du code principal en langage COBOL et au moins une instruction SQL embarquée et pour remplacer chaque instruction SQL embarquée par du code de remplacement en langage COBOL comportant un appel à une routine de la bibliothèque logicielle passant à la routine une instruction 15 issue de l'instruction SQL embarquée, afin de fournir un code source pré- compilé, 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 20 exécutés par un dispositif informatique, et dans lequel la routine appelée est conçue pour envoyer à l'interface un message comportant l'instruction passée avec l'appel. La société MICROFOCUS commercialise par exemple une suite logicielle comportant un compilateur COBOL et un pré-compilateur (également appelé 25 L'interface peut ainsi être utilisée par plusieurs clients. Elle est donc réutilisable par chaque un programme en langage COBOL développé grâce au système de l'invention. De façon optionnelle, 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 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 3 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. De façon optionnelle également, la procédure de consignation comporte : - l'envoi, à chaque base de données de la liste, d'une première instruction 5 SQL demandant de préparer une consignation, la réception, de la part de chaque base de données de la liste, d'une réponse indiquant que cette base de données est prête à mettre en oeuvre la consignation, suite à la réception des réponses de toutes les bases de données de la 10 liste, l'envoi, à chaque base de données de la liste, d'une deuxième instruction SQL demandant de mettre en oeuvre la consignation. 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 15 nombre maximal de résultats, 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, 20 filtrer les résultats pour ne garder que le nombre maximal de 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. De façon optionnelle également, les résultats de la réponse sont classés selon un certain ordre, et les résultats gardés sont les premiers selon cet ordre. 25 De façon optionnelle également, l'interface est un programme destiné à être exécutée par un dispositif informatique connecté au réseau informatique, différent du dispositif informatique exécutant le programme et la routine appelée. De façon optionnelle également, l'interface est un programme destiné à s'exécuter dans une machine virtuelle Java. 30 De façon optionnelle également, le programme formant l'interface est conçu pour communiquer avec chaque base de données de l'ensemble au travers de la bibliothèque logicielle JDBC. De façon optionnelle également, le pré-compilateur est en outre conçu pour : - rechercher, dans la ou les instructions SQL embarquées, une expression comportant : 4 - 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 5 remplacer chaque expression trouvée par du code en langage COBOL fournissant les N premiers caractères de la première variable, N étant la valeur de la variable d'indicateur. De façon optionnelle également, le pré-compilateur est en outre conçu pour, avant la recherche dans la ou les instructions SQL embarquées de l'expression : 10 - rechercher, dans la ou les instructions SQL embarquées, une variable définie dans le code en langage COBOL comme étant de longueur variable, remplacer chaque variable de longueur variable trouvée par une expression de variable d'indicateur comportant : 15 - 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 principale et d'indicateur. 20 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 25 - 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. 30 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 seulement la structure informatique contenant les données, mais également le 35 système de gestion de base de données permettant de manipuler cette structure. 5 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. Le système de communication avec la ou les bases de données 102 comporte 5 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 dispositifs informatiques 106, 108 présentent des adresses respectives dans ce 10 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 une routine, dite de communication, un pré-compilateur 120 (également appelé 15 « 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 une base de données 102 de l'ensemble. Dans le cas le plus simple, l'instruction SQL 20 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 central (« mainframe » en anglais) utilisant un système d'exploitation de la famille 25 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 enregistrés une machine virtuelle 128 (une machine virtuelle Java dans l'exemple 30 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 JDBC de l'anglais « Java Database Connectivity ») pour se connecter et 6 communiquer avec chaque base de données 102 de l'ensemble. L'interface 130 est un serveur dont la routine de communication est un client. En référence à la figure 2, un procédé 200 de développement et d'utilisation d'un programme destiné à communiquer avec l'ensemble de base(s) de données 102 5 va à présent être décrit. Au cours d'une étape 202, le pré-compilateur 120 obtient le code source 116 comportant la ou les instructions SQL embarquées. Chaque instruction SQL embarquée est par exemple repérée dans le code source 116 grâce à au moins une expression prédéfinie. Par exemple, chaque instruction SQL embarquée est placée 10 entre une expression prédéfinie de début (« EXEC SQL » dans l'exemple décrit) et une expression prédéfinie de fin ( REVENDICATIONS1. Système de développement d'un programme destiné à communiquer 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), un pré-compilateur (120) conçu pour analyser un code source (116) comportant du code principal en langage COBOL et au moins une instruction SQL embarquée et pour remplacer chaque instruction SQL embarquée par du code de remplacement en langage COBOL comportant un appel à une routine de la bibliothèque logicielle (118) passant à la routine une instruction issue de l'instruction SQL embarquée, afin de fournir un code source pré-compilé, 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), et dans lequel la routine appelée est conçue pour envoyer à l'interface (130) un message comportant l'instruction passée avec l'appel, le système étant caractérisé en ce que 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, l'interface (130) étant 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. 2. Système selon la revendication 1, dans lequel l'interface (130) est 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, analyser chaque message reçu de la routine pour déterminer si l'instruction de ce message est une instruction prédéfinie, et 16 - 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. 3. Système selon la revendication 2, dans lequel la procédure de 5 consignation comporte : l'envoi, à chaque base de données de la liste, d'une première instruction SQL demandant de préparer une consignation, la réception, de la part de chaque base de données de la liste, d'une réponse indiquant que cette base de données est prête à mettre en 10 oeuvre la consignation, suite à la réception des réponses de toutes les bases de données de la liste, l'envoi, à chaque base de données de la liste, d'une deuxième instruction SQL demandant de mettre en oeuvre la consignation. 15 4. Système selon l'une quelconque des revendications 1 à 3, 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. 5. Système selon la revendication 4, dans lequel les résultats de la réponse sont classés selon un certain ordre, et dans lequel les résultats gardés sont les 30 premiers selon cet ordre. 6. Système l'une quelconque des revendications 1 à 5, dans lequel l'interface (130) est un programme destiné à être exécutée par un dispositif informatique (108) connecté au réseau informatique (110), différent du dispositif informatique (106) exécutant le programme et la routine appelée. 17 7. Système selon l'une quelconque des revendications 1 à 6, dans lequel l'interface (130) est un programme destiné à s'exécuter dans une machine virtuelle Java. 8. Système selon la revendication 7, dans lequel le programme formant 5 l'interface (130) est conçu pour communiquer avec chaque base de données (102) de l'ensemble au travers de la bibliothèque logicielle JDBC. 9. Système selon l'une quelconque des revendications 1 à 8, dans lequel le pré-compilateur (120) est en outre conçu pour : - rechercher, dans la ou les instructions SQL embarquées, une 10 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 15 principale et d'indicateur, et remplacer chaque expression trouvée par du code en langage COBOL fournissant les N premiers caractères de la première variable, N étant la valeur de la variable d'indicateur. 10. Système selon la revendication 9, dans lequel le pré-compilateur (120) est 20 en outre conçu pour, avant la recherche dans la ou les instructions SQL embarquées de l'expression : rechercher, dans la ou les instructions SQL embarquées, une variable définie dans le code en langage COBOL comme étant de longueur variable, 25 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, - une variable d'indicateur destinée à contenir un nombre entier, et 30 - le ou les caractères prédéfinis d'association des variables principale et d'indicateur.