--- rpl/src/sql.c 2012/12/19 09:58:28 1.42 +++ rpl/src/sql.c 2012/12/20 15:32:52 1.43 @@ -38,7 +38,6 @@ struct_objet * parametres_sql(struct_processus *s_etat_processus, struct_objet *s_parametres) { -#if defined(MYSQL_SUPPORT) || defined(POSTGRESQL_SUPPORT) struct_liste_chainee *l_element_courant; struct_objet *s_connecteur; @@ -46,6 +45,7 @@ parametres_sql(struct_processus *s_etat_ unsigned char *locale; 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; @@ -54,6 +54,7 @@ parametres_sql(struct_processus *s_etat_ # endif unsigned int port; +# endif if ((*s_parametres).type != LST) { @@ -95,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); @@ -158,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; @@ -353,11 +403,9 @@ parametres_sql(struct_processus *s_etat_ (*s_etat_processus).erreur_execution = d_ex_argument_invalide; return(NULL); } +# endif return(s_connecteur); -#else - return(NULL); -#endif } // vim: ts=4