developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
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)

oci.patch (3.6 KB) - added by laurentj 10 years ago.

Download all attachments as: .zip

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

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 ?

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.

Note: See TracTickets for help on using tickets.