/** * Adds a procedure to the execution queue. * If AutoSave is enabled, the action will be commited. * * @param Fluent\ProcedureBuilder $ProcedureBuilder The procedure to execute * @return void */ public function ExecuteProcedure(Object\IProcedure $Procedure) { if ($Procedure->GetEntityType() !== $this->EntityType) { throw new Object\TypeMismatchException('The supplied procedure is of type %s, expecting: %s', $Procedure->GetEntityType(), $this->EntityType); } $this->ExecutionQueue[] = $Procedure; $this->AutoSave(); }
/** * @access private * * Maps a supplied object procedure to an equivalent relational procedure. * * @param Object\IProcedure $ObjectProcedure The object procedure * @return Relational\Procedure The equivalent relational procedure */ public final function MapProcedure(Object\IProcedure $ObjectProcedure) { $EntityRelationalMap = $this->VerifyEntityTypeIsMapped($ObjectProcedure->GetEntityType()); $RelationalProcedure = new Relational\Procedure($EntityRelationalMap->GetMappedPersistTables(), $EntityRelationalMap->GetCriterion()); $this->MapCriterion($EntityRelationalMap, $ObjectProcedure->GetCriterion(), $RelationalProcedure->GetCriterion()); foreach ($this->MapExpressions($EntityRelationalMap, $ObjectProcedure->GetExpressions()) as $MappedExpression) { $RelationalProcedure->AddExpression($MappedExpression); } return $RelationalProcedure; }