dolibarr-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dolibarr-dev] 2e Patch compatibilité Mysql 3.2 (Delete Mul titable cont


From: Raphaël Bertrand (Résultic)
Subject: [Dolibarr-dev] 2e Patch compatibilité Mysql 3.2 (Delete Mul titable contrat)
Date: Fri, 20 Jun 2008 16:25:35 +0200
User-agent: Thunderbird 2.0.0.14 (Windows/20080421)

Bonjour,

Voici un patch remplaçant les requêtes comportant encore un delete multitable dans contrat.class.php par du code php équivalent, afin de les rendre compatible avec Mysql 3.2.


--
*Raphaël Bertrand*
Résultic - Management & Informatique
Siège : 11 rue Tronchet - 69006 LYON
Bureaux : 11 pl Maréchal Lyautey - 69006 LYON
Fixe. 08 74 77 00 70
Fax. 08 25 24 85 02
E-Mail : address@hidden
Index: contrat.class.php
===================================================================
RCS file: /sources/dolibarr/dolibarr/htdocs/contrat/contrat.class.php,v
retrieving revision 1.104
diff -u -r1.104 contrat.class.php
--- contrat.class.php   1 Jun 2008 16:31:03 -0000       1.104
+++ contrat.class.php   20 Jun 2008 14:20:35 -0000
@@ -2,6 +2,7 @@
 /* Copyright (C) 2003      Rodolphe Quiedeville <address@hidden>
  * Copyright (C) 2004-2007 Destailleur Laurent  <address@hidden>
  * Copyright (C) 2006      Andre Cianfarani     <address@hidden>
+ * Copyright (C) 2008 Raphael Bertrand (Resultic)       <address@hidden>
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * the Free Software Foundation; either version 2 of the License, or
@@ -572,35 +573,92 @@
         if (! $error)
         {
                        // Delete element_contact
+                       /*
                        $sql = "DELETE ec";
                        $sql.= " FROM ".MAIN_DB_PREFIX."element_contact as ec, 
".MAIN_DB_PREFIX."c_type_contact as tc";
                $sql.= " WHERE ec.fk_c_type_contact = tc.rowid";
                        $sql.= " AND tc.element='".$this->element."'";
                        $sql.= " AND ec.element_id=".$this->id;
-
+                       */
+                       
+                       $sql = "SELECT ec.rowid as ecrowid";
+                       $sql.= " FROM ".MAIN_DB_PREFIX."element_contact as ec, 
".MAIN_DB_PREFIX."c_type_contact as tc";
+               $sql.= " WHERE ec.fk_c_type_contact = tc.rowid";
+                       $sql.= " AND tc.element='".$this->element."'";
+                       $sql.= " AND ec.element_id=".$this->id;
+                       
                        dolibarr_syslog("Contrat::delete element_contact 
sql=".$sql,LOG_DEBUG);
-               $resql=$this->db->query($sql);
+                       $resql=$this->db->query($sql);
                        if (! $resql)
                        {
                                $this->error=$this->db->error();
                                $error++;
                        }
+                       $numressql=$this->db->num_rows($resql);
+                       if (! $error && $numressql )
+                       {
+                               $tab_resql=array();
+                               for($i=0;$i<$numressql;$i++)
+                               {
+                                       
$objresql=$this->db->fetch_object($resql);
+                                       $tab_resql[]= $objresql->ecrowid;
+                               }
+                               $this->db->free($resql);
+                               
+                               $sql= "DELETE FROM 
".MAIN_DB_PREFIX."element_contact ";
+                               $sql.= " WHERE 
".MAIN_DB_PREFIX."element_contact.rowid IN (".implode(",",$tab_resql).")";
+                               
+                               dolibarr_syslog("Contrat::delete 
element_contact sql=".$sql,LOG_DEBUG);
+                       $resql=$this->db->query($sql);
+                               if (! $resql)
+                               {
+                                       $this->error=$this->db->error();
+                                       $error++;
+                               }
+                       }
                }
                
         if (! $error)
         {
                        // Delete contratdet_log
+                       /*
                        $sql = "DELETE cdl";
                        $sql.= " FROM ".MAIN_DB_PREFIX."contratdet_log as cdl, 
".MAIN_DB_PREFIX."contratdet as cd";
+                       $sql.= " WHERE cdl.fk_contratdet=cd.rowid AND 
cd.fk_contrat=".$this->id;
+                       */
+                       $sql = "SELECT cdl.rowid as cdlrowid ";
+                       $sql.= " FROM ".MAIN_DB_PREFIX."contratdet_log as cdl, 
".MAIN_DB_PREFIX."contratdet as cd";
                $sql.= " WHERE cdl.fk_contratdet=cd.rowid AND 
cd.fk_contrat=".$this->id;
-
+                       
                        dolibarr_syslog("Contrat::delete contratdet_log 
sql=".$sql, LOG_DEBUG);
-               $resql=$this->db->query($sql);
+                       $resql=$this->db->query($sql);
                        if (! $resql)
                        {
                                $this->error=$this->db->error();
                                $error++;
                        }
+                       $numressql=$this->db->num_rows($resql);
+                       if (! $error && $numressql )
+                       {
+                               $tab_resql=array();
+                               for($i=0;$i<$numressql;$i++)
+                               {
+                                       
$objresql=$this->db->fetch_object($resql);
+                                       $tab_resql[]= $objresql->cdlrowid;
+                               }
+                               $this->db->free($resql);
+                               
+                               $sql= "DELETE FROM 
".MAIN_DB_PREFIX."contratdet_log ";
+                               $sql.= " WHERE 
".MAIN_DB_PREFIX."contratdet_log.rowid IN (".implode(",",$tab_resql).")";
+                       
+                               dolibarr_syslog("Contrat::delete contratdet_log 
sql=".$sql, LOG_DEBUG);
+                       $resql=$this->db->query($sql);
+                               if (! $resql)
+                               {
+                                       $this->error=$this->db->error();
+                                       $error++;
+                               }
+                       }
                }
                
         if (! $error)


reply via email to

[Prev in Thread] Current Thread [Next in Thread]