Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] problème avec jDao uilisé avec Oracle 10g

Posted by William on 08/08/2012 16:54

Bonjour

Je suis en train de développer une application avec jelix 1.3.1. cette application doit fonctionner avec plusieurs sgbd en l'occurence mysql, postgret, mssql et oracle. j'ai mis en place les fichiers xml dao de mes entités. Et pour chaque dao, les name ont été renommés. par exemple le contenu du fichier xml dao de la table 'com_language' est le suivant :

<?xml version="1.0" encoding="UTF-8"?>
<dao xmlns="http://jelix.org/ns/dao/1.0">
    <datasources>
        <primarytable name="com_language" realname="com_language" primarykey="id" />
    </datasources>
    <record>
        <property name="iId" fieldname="id" datatype="char" required="true"/>
        <property name="sLabel" fieldname="label" datatype="char" default=""/>
        <property name="iStatusId" fieldname="is_deleted" datatype="int" required="true" default="0"/>
        <property name="sIsoCode" fieldname="iso_code" datatype="char" default=""/>
       
    </record>
    <factory>
    </factory>
</dao>

Sous MySql et Postgre, le code fonctionne parfaitement. Mais sous oracle, je n'ai pas les résultats des requêtes par jDao. Après quelques investigations personnelles j'ai constaté que tous les noms dans l'objet record sont en miniscule. Exemple: j'accède à un champ de mon record comme ceci $record->sLabel. Sous MysQl et Postgre, j'ai bien la valeur atendue. Mais sous oracle, c'est vide. Oracle renvoie bien les résultats, mais dans le record de Jelix, ils sont en miniscule et pour que j'accède à ma valeur, je dois faire ceci : $record->slabel. Je ne comprend pas pourquoi. j'illustre le code qui réalise l'extraction des données ci-dessus

        $olanguageDao = jDao::get("language"); // language : nom du fichier xml dao          
        $oRecord        = $olanguageDao->findAll();  
        $aLanguages     = $oRecord->fetchAll();

        $aTmp = array();
        $alanguagesTab = array();
        foreach ($aLanguages   as $oLanguageRow) {        
            $aTmp['iId']        = $oLanguageRow->iId;            
            $aTmp['sLabel']     = $oLanguageRow->sLabel;
            $aTmp['iStatusId']  = $oLanguageRow->iStatusId;
            $aTmp['sIsoCode']   = $oLanguageRow->sIsoCode; 
            $alanguagesTab [] = $aTmp; 
        } // end foreach

le déréferencement suivant "$oLanguageRow->iId" ne renvoie rien par contre lorque j'ai le code suivant "$oLanguageRow->iid" ou "$oLanguageRow->slabel" ; j'obtiens mes valeurs attendues. et avec ce comportment je suis embété avec mon application multi base de données.

Alors mes questions sont les suivantes :

  • Pourqoui tout mettre en miniscule dans le cas d'oracle, et pas pour les autres (mysql, postgre, ...) ?
  • y a-t'il un moyen de conserver la convention de nommage de mes colonnes et exploiter ma bd oracle ?

Merci pour vos précieuses reponses !

  [Opened] problème avec jDao uilisé avec Oracle 10g

Reply #1 Posted by laurentj on 08/08/2012 22:20

Bonjour,

Pourqoui tout mettre en miniscule dans le cas d'oracle, et pas pour les autres (mysql, postgre, ...) ?

L'api Oracle renvoi par défaut les champs avec des noms en majuscule. Même si jDbPDOConnection n'indiquait pas à l'API d'avoir les noms en minuscule, tu aurais le même souci en fin de compte. Et donc je pense qu'il n'y a pas moyen de conserver ta convention de nommage.

À moins qu'avec Oracle 10G, l'API oracle renvoi des noms avec la casse d'origine. Commente les deux lignes dans jDbConnection et dis nous si ça fonctionne comme attendu.

Et quel est ta version de PHP ?

  [Opened] problème avec jDao uilisé avec Oracle 10g

Reply #2 Posted by foxmask on 08/09/2012 11:36

D'ordinaire on met tous les noms des objets oracle en majuscule sinon on est bon pour mettre des double quote ( pour les entourer ) pour utiliser les tables/colonnes (vachement pratique à écrire ;)

à voir les explications. J'en ai fait l'expérience "à mes débuts" de dba oracle ;)


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] problème avec jDao uilisé avec Oracle 10g

Reply #3 Posted by William on 08/09/2012 13:54

Bonjour

lorsque je commente les deux lignes de codes, cela marche et j'obtiens les resultats attendus, cependant, en activant le logger sql afin de visualiser les requête généré j'ai constaté que:

  • lorque les name et fieldname des records (du fichier dao) sont identiques, la requête générée n'inclut pas les alias fieldname et du coup les noms de colonne renvoyé sont en majuscule
  • Dans le cas contraire, la requête généré inclu bel et bien les alias (entre quote) et oblige oracle a retouner les nom de colonnes (alias ou fieldname) tel quel sans modification.

Dans le soucis de ne pas toucher le code source de jelix, j'envisage de mettre en place un plugin de coordinateur qui configurera le sgbd oracle afin de ne pas modifier la casse des noms de colonnes. est ce approprié a votre avis ?

Merci bien pour votre sollicitude Bien Coordialement . . .

  [Opened] problème avec jDao uilisé avec Oracle 10g

Reply #4 Posted by laurentj on 08/14/2012 22:56

Merci pour les renseignements.

Si j'ai bien compris, faudrait donc générer des alias dans tout les cas, pour oracle.

Et sinon tu parles de "configurer". Le faire dans un plugin de coordinateur, pourquoi pas. Mais cela veut dire que cela va être exécuter, même quand aucune requête ne sera faites.

Peut être vaut mieux t-il le faire dans jDbPDOConnection ? Quelle requête faut-il éxecuter pour faire cette configuration ?

 
Page
  1. problème avec jDao uilisé avec Oracle 10g