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 14 years ago

Closed 14 years ago

#125 closed bug (fixed)

Bug sur la méthode compilée update()

Reported by: yannick@… Owned by: laurentj
Priority: normal Milestone: Jelix 1.0beta2
Component: jelix:dao Version: 1.0 beta1
Severity: major Keywords: Dao, Compiler, Update
Cc: Blocked By:
Blocking: Documentation needed:
Hosting Provider: Php version: 5.1.2

Description

La méthode compilée update () pour une dao est bugguée dans un cas très particulier où les seuls champ définis par la dao sont uniquement des clefs primaires :

Exemple de dao fautive :

<dao xmlns="http://jelix.org/ns/dao/1.0">
  <datasources>
    <primarytable 
		name="_entity_has_element"
		primarykey="entity_id,element_id,role_id" />
  </datasources>
	
  <record>
  	<property 
  		name="entity_id" 
		fieldname="entity_id" 
		datatype="integer"   
		required="true" />
	<property       
  		name="element_id" 
		fieldname="element_id" 
		datatype="integer"   
		required="true" />
	<property       
  		name="role_id" 
		fieldname="role_id" 
		datatype="integer"   
		required="true" />
  </record>
</dao>

Et ça donne la méthode suivante, qui, de façon évidente, pose problème :) :

public function update ($record){
   $query = 'UPDATE _entity_has_element SET 

 where  entity_id'.($record->entity_id===null ? ' IS NULL ' : ' = '.intval($record->entity_id)).' AND element_id'.($record->element_id===null ? ' IS NULL ' : ' = '.intval($record->element_id)).' AND role_id'.($record->role_id===null ? ' IS NULL ' : ' = '.intval($record->role_id)).'
';
   return $this->_conn->exec ($query);
 }

Change History (2)

comment:1 Changed 14 years ago by laurentj

  • Component changed from jelix to jelix:dao
  • Milestone set to Jelix 1.0beta2
  • Owner set to laurentj
  • Status changed from new to assigned

comment:2 Changed 14 years ago by laurentj

  • Resolution set to fixed
  • Status changed from assigned to closed

Corrigé dans le trunk. dans ce type de cas, update() génère maintenant une exception.

Note: See TracTickets for help on using tickets.