developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.
Opened 10 years ago
Closed 10 years ago
#1232 closed bug (fixed)
Le driver OCI avec PDO ne fonctionne pas
Reported by: | Vincentv | Owned by: | |
---|---|---|---|
Priority: | normal | Milestone: | Jelix 1.2RC3 |
Component: | jelix:plugins:db | Version: | trunk |
Severity: | normal | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Documentation needed: | no | |
Hosting Provider: | Php version: |
Description (last modified by laurentj)
Il y a des problème dans oci.dbtools.php
1 . Problème avec les quotes dans le requête SQL ligne 127 a 138
2 . à la ligne 136, ca ne peut pas fonctionner :
concat(\''.$this->_getAISequenceName($tableName,'\', UTC.COLUMN_NAME').'))
en second paramètre de _getAISequenceName, on devrait passer la valeur de UTC.COlUMN_NAME et non ', UTC.COLUMN_NAME'
Attachments (1)
Change History (7)
comment:1 Changed 10 years ago by laurentj
- Component changed from jelix to jelix:plugins:db
- Description modified (diff)
- Milestone changed from Jelix 1.3 to Jelix 1.2
comment:2 Changed 10 years ago by laurentj
comment:3 Changed 10 years ago by Vincentv
il me semble pas qu'il y a un modele de nom pour les sequences. Chez nous pur les autoincrements sur les id ca va être <TABLE>_SEQ.
Je pense que le mieux serait de regarder dans les trigger pour récupérer les sequences affecter a un champs. Si la personne n'utilise pas de trigger, il devrais renseigner manuellement le DAO.
Pour les requêtes pour découvrir les tables, celles de Zend Framework pourraient être utile (http://framework.zend.com/code/filedetails.php?repname=Zend+Framework&path=/trunk/library/Zend/Db/Adapter/Pdo/Oci.php).
J'ai pas encore tester le patch, je le ferais demain
comment:4 Changed 10 years ago by Vincentv
La création du DAO fonctionne, mais la détection du champ auto-incrémenté avec la séquence n'est pas bonne. Voici un exemple du dao généré avec le patch (sans les commentaires)
<?xml version="1.0" encoding="UTF-8"?> <dao xmlns="http://jelix.org/ns/dao/1.0"> <datasources> <primarytable name="label" realname="label" primarykey="id" /> </datasources> <record> <property name="date_ajout" fieldname="date_ajout" datatype="date" autoincrement="true" default="" sequence="LABEL_SEQ"/> <property name="id" fieldname="id" datatype="number" autoincrement="true" sequence="LABEL_SEQ"/> <property name="nom_interne" fieldname="nom_interne" datatype="varchar2" autoincrement="true" default="" maxlength="255" sequence="LABEL_SEQ"/> <property name="nom_externe" fieldname="nom_externe" datatype="varchar2" autoincrement="true" default="" maxlength="255" sequence="LABEL_SEQ"/> <property name="description" fieldname="description" datatype="varchar2" autoincrement="true" default="" maxlength="255" sequence="LABEL_SEQ"/> <property name="regle_groupe_id" fieldname="regle_groupe_id" datatype="number" autoincrement="true" default="null" sequence="LABEL_SEQ"/> <property name="asset_id" fieldname="asset_id" datatype="number" autoincrement="true" sequence="LABEL_SEQ"/> <property name="pk_ordre" fieldname="pk_ordre" datatype="number" autoincrement="true" default="" sequence="LABEL_SEQ"/> <property name="relance_delai" fieldname="relance_delai" datatype="date" autoincrement="true" default="" sequence="LABEL_SEQ"/> <property name="aide_url" fieldname="aide_url" datatype="varchar2" autoincrement="true" default="" maxlength="1024" sequence="LABEL_SEQ"/> </record> <factory> </factory> </dao>
Comme on peut le voir l'auto-incrément et la sequence sont rajoutés sur tout les champs
Changed 10 years ago by laurentj
comment:5 Changed 10 years ago by laurentj
nouveau patch. par contre, il ne detecte les sequences que sur les clés primaires. Je ne sais pas comment dans oracle on a la liste des sequences rattachées à des champs d'une table.
comment:6 Changed 10 years ago by laurentj
- Resolution set to fixed
- Status changed from new to closed
Fixed : https://bitbucket.org/jelix/jelix-trunk/changeset/4529f0e95544
Il est en fait impossible de determiner la sequence utilisée pour un champs donné avec oracle. j'ai donc rajouté un paramètre à createdao et aux méthodes getfieldList, qui permet d'indiquer le nom de la sequence correspondante à la clé primaire auto incrémentée.
Voici un patch. Dis moi si ça règle les problèmes.
Il faudrait que tu me dises aussi, à quoi ressemble les noms de séquence par défaut, histoire qu'on propose un pattern par défaut, plutôt que d'obliger à mettre un sequence_AI_pattern dans le profile.
Sinon c'est quoi le problème avec les quotes ?