- 1
[Opened] Bidouille pour modifier le chemin absolu d'une base PDO sqlite ?
Posted by Maurice on 06/26/2008 18:26
Bonjour à tous
Y-a t'il une bidouille que je pourrais faire dans un fichier php (application.ini.php , un point d'entrée, ou tout autre fichier de l'appli) pour modifier (surcharger) l'information "dsn" indiquée dans le dbprofiles.ini.php pour une base sqlite ?
[testapp_sqlite3_pdo_v2] driver=pdo dsn=sqlite:/.../testapp.sqlite3
(toujours dans l'idée d'obtenir une appli relogeable, et en attendant une éventuelles solution plus propre au ticket590)
Merci d'avance,
- Maurice
[Opened] Re: Bidouille pour modifier le chemin absolu d'une base PDO sqlite ?
Posted by Maurice on 06/27/2008 11:08
Bonjour à tous,
Pour résoudre mon probleme, je n'ai pas trouvé de solution simple consistant à ne modifier que mon application ("testapp" en ce moment)
J'ai donc du ajouter une petite bidouille dans le constructeur de la classe jDbPDOConnection. Ca ne devrait pas ralentir beaucoup les vraies appli web, car cela ne concerne qui les bases PDO utilisant le driver sqlite (donc ça coûte seulement un test de plus sur une variable).
La modif permet une spécification de la base sqlite sous la forme suivante :
. [testapp_sqlite_pdo] driver=pdo ; dsn=sqlite:#JELIX_APP_PATH#var/db/sqlite/testapp.sqlite3 dsn=sqlite:#JELIX_APP_PATH#/../var/data/testapp.sqlite3
On peut aussi faire :
. dsn=sqlite:xxx#MY_CONST_1#yyyyy#MY_CONST_2#zzz
Cependant :
- on peut essayer de trouver mieux comme caractère, mais je n'ai rien trouvé : on se fait facilement jeter
- on pourrait aussi utiliser un nom de dbms spécifiquement dédié à cette fonctionnalité. (e.g. jsqlite, sqlite_eval, ...) et simplement "évaluer" le contenu en php, mais le format .ini semblant plutot susceptible si on lui passe des caractères "$" ou accolades : on ne peut donc pratiquement passer que des constantes.
La modif. de fichier "jelix/db/jDbPDOConnection.class.php" consiste à insérer dans le construction le code suivant :
. unset($prof['driver']); //////////////////////////////////////////////////////////////// // ajout pour substitution de constant dans le path de sqlite if ($this->dbms == 'sqlite') { while (preg_match('/(.*)#(\w+)#(.*)$/', $profil['dsn'], $m)) { eval("\$val=$m[2];"); $profil['dsn'] = "$m[1]". $val . "$m[3]"; } } //////////////////////////////////////////////////////////////// parent::__construct($profil['dsn'], $user, $password, $prof);
Voila je peux ajouter ce code sur ticket590 si c'est utile, mais je préfère discuter sur le forum.
Maurice
[Opened] Re: Bidouille pour modifier le chemin absolu d'une base PDO sqlite ?
Posted by bballizlife on 06/27/2008 12:25
J'ai survolé ton patch mais comme il y a un ticket là dessus, il est préférable que la discussion se fasse là bas, c'est le plus simple et le plus cohérent pour le suivi de la fonctionnalité.
Merci ! ;)
N'importe comment c'est dans la doc
[Opened] Re: Bidouille pour modifier le chemin absolu d'une base PDO sqlite ?
Posted by laurentj on 06/27/2008 13:31
#JELIX_APP_PATH#
Franchement horrible, alors que partout ailleurs dans la conf on utilise simplement le raccourci "app:".
- 1