--- rpl/src/sql.c 2010/02/10 10:14:26 1.3 +++ rpl/src/sql.c 2017/01/18 15:44:25 1.62 @@ -1,7 +1,7 @@ /* ================================================================================ - RPL/2 (R) version 4.0.11 - Copyright (C) 1989-2010 Dr. BERTRAND Joël + RPL/2 (R) version 4.1.26 + Copyright (C) 1989-2017 Dr. BERTRAND Joël This file is part of RPL/2. @@ -20,7 +20,7 @@ */ -#include "rpl.conv.h" +#include "rpl-conv.h" /* @@ -42,15 +42,19 @@ parametres_sql(struct_processus *s_etat_ struct_objet *s_connecteur; - unsigned char *base; unsigned char *locale; - unsigned char *mot_de_passe; - unsigned char *serveur; - unsigned char *sport; unsigned char *type_base; + unsigned char *serveur; +# if defined(MYSQL_SUPPORT) || defined(POSTGRESQL_SUPPORT) + unsigned char *base; unsigned char *utilisateur; + unsigned char *mot_de_passe; +# ifdef POSTGRESQL_SUPPORT + unsigned char *sport; +# endif unsigned int port; +# endif if ((*s_parametres).type != LST) { @@ -72,7 +76,7 @@ parametres_sql(struct_processus *s_etat_ return(NULL); } - if ((type_base = conversion_majuscule((unsigned char *) + if ((type_base = conversion_majuscule(s_etat_processus, (unsigned char *) (*(*l_element_courant).donnee).objet)) == NULL) { (*s_etat_processus).erreur_systeme = d_es_allocation_memoire; @@ -92,7 +96,8 @@ parametres_sql(struct_processus *s_etat_ */ if ((strcmp(type_base, "MYSQL") != 0) && - (strcmp(type_base, "POSTGRESQL") != 0)) + (strcmp(type_base, "POSTGRESQL") != 0) && + (strcmp(type_base, "SQLITE") != 0)) { (*s_etat_processus).erreur_execution = d_ex_argument_invalide; return(NULL); @@ -155,6 +160,54 @@ parametres_sql(struct_processus *s_etat_ serveur = (unsigned char *) (*(*l_element_courant).donnee).objet; + // Dans le cas d'une base de données SQLite, seul le nom du fichier + // importe. + + if (strcmp(type_base, "SQLITE") == 0) + { + if ((*l_element_courant).suivant != NULL) + { + liberation(s_etat_processus, s_connecteur); + (*s_etat_processus).erreur_execution = d_ex_argument_invalide; + return(NULL); + } + + (*((struct_connecteur_sql *) (*s_connecteur).objet)).descripteur.sqlite + = NULL; + + if (sqlite3_open_v2(serveur, &((*((struct_connecteur_sql *) + (*s_connecteur).objet)).descripteur.sqlite), + SQLITE_OPEN_READWRITE, NULL) != SQLITE_OK) + { + if ((*((struct_connecteur_sql *) (*s_connecteur).objet)) + .descripteur.sqlite != NULL) + { + sqlite3_close((*((struct_connecteur_sql *) + (*s_connecteur).objet)).descripteur.sqlite); + } + + liberation(s_etat_processus, s_connecteur); + (*s_etat_processus).erreur_execution = d_ex_erreur_sql; + return(NULL); + } + + return(s_connecteur); + } + else + { +# if !(defined(MYSQL_SUPPORT) || defined(POSTGRESQL_SUPPORT)) + if ((*s_etat_processus).langue == 'F') + { + printf("+++Attention : Support de %s non compilé !\n", type_base); + } + else + { + printf("+++Warning : %s support not available !\n", type_base); + } +# endif + } + +# if defined(MYSQL_SUPPORT) || defined(POSTGRESQL_SUPPORT) // Recherche du nom de la base de données l_element_courant = (*l_element_courant).suivant; @@ -289,6 +342,8 @@ parametres_sql(struct_processus *s_etat_ } fflush(stdout); + + (*s_etat_processus).erreur_execution = d_ex_instruction_indisponible; # endif } else if (strcmp((*((struct_connecteur_sql *) (*s_connecteur).objet)).type, @@ -338,6 +393,8 @@ parametres_sql(struct_processus *s_etat_ } fflush(stdout); + + (*s_etat_processus).erreur_execution = d_ex_instruction_indisponible; # endif } else @@ -346,6 +403,7 @@ parametres_sql(struct_processus *s_etat_ (*s_etat_processus).erreur_execution = d_ex_argument_invalide; return(NULL); } +# endif return(s_connecteur); }