phpgroupware-developers
[Top][All Lists]
Advanced

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

SV: [phpGroupWare-developers] Nested db-objects


From: Sigurd Nes
Subject: SV: [phpGroupWare-developers] Nested db-objects
Date: Thu, 22 May 2008 15:06:55 +0200 (MEST)

> From: Olivier Berger address@hidden
> Sent: 2008-05-22 13:35:48 CEST
> To: address@hidden
> Subject: Re: [phpGroupWare-developers] Nested db-objects
> 
> Le mercredi 21 mai 2008 à 20:02 +0200, Sigurd Nes a écrit :
> > Hi all,
> > 
> > I find it very useful to have the ability to have the choice of using 
> > nested 
> > db-objects.
> > 
> > Example:
> > When integrating with external systems - it is very convenient to start a 
> > transaction on system 1 - do some work (like sync) on system 2 - and if 
> > things 
> > went well do a commit on the result in system 1.
> > 
> 
> Sure.
> 
> Are there any test cases to verify that such frameworks are working as
> expected in phpgw ?

Her is one example on how I have used nested db-objects:
I have a configurable hierarchy of locations (read: estate/building/floor/room 
etc)
Within each level (which is represented by a set of tables) one can have custom 
fields of any type.
This function allows you to delete the bottom level and cleaning out the custom 
fields from the meta database in the process.

<code>
function delete($id)
{
        $this->init_process();
        $this->oProc->m_odb->transaction_begin();
        $this->db->transaction_begin();

        $table          = 'fm_location_type';

        $this->db->query("SELECT max(id) as id FROM $table",__LINE__,__FILE__);
        $this->db->next_record();
        if($this->db->f('id') > $id)
        {
                $this->db->transaction_abort();
                $this->oProc->m_odb->transaction_abort();
                $receipt['error'][] = array('msg' => lang('please delete from 
the bottom'));
                
$GLOBALS['phpgw']->session->appsession('receipt','property',$receipt);

                return $receipt;
        }

        $this->oProc->DropTable('fm_location' . $id);
        $this->oProc->DropTable('fm_location' . $id . '_category');
        $this->oProc->DropTable('fm_location' . $id . '_history');

        $attrib_table   = 'phpgw_cust_attribute';
        $choice_table   = 'phpgw_cust_choice';

        $this->db->query("DELETE FROM $attrib_table WHERE ...
        $this->db->query("DELETE FROM $choice_table WHERE ...
        $this->db->query("DELETE FROM $table WHERE id=" . 
(int)$id,__LINE__,__FILE__);

        if($this->db->transaction_commit()
        {
                $this->oProc->m_odb->transaction_commit();
        }
}
</code>

Regards

Sigurd

reply via email to

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