예제 #1
0
파일: IO.php 프로젝트: promoso/HVAC
 /**
  * Deletes a record from the database.
  * @param Dataface_Record $record Dataface_Record object to be deleted.
  * @param boolean $secure Whether to check permissions.
  * @returns mixed true if successful, or PEAR_Error if failed.
  */
 function delete(&$record, $secure = false)
 {
     if ($secure && !$record->checkPermission('delete')) {
         // Use security to check to see if we are allowed to delete this
         // record.
         return Dataface_Error::permissionDenied(df_translate('scripts.Dataface.IO.delete.PERMISSION_DENIED', 'Could not delete record "' . $record->getTitle() . '" from table "' . $record->_table->tablename . '" because you have insufficient permissions.', array('title' => $record->getTitle(), 'table' => $record->_table->tablename)));
     }
     $builder = new Dataface_QueryBuilder($this->_table->tablename);
     if ($this->fireTriggers) {
         $res = $this->fireBeforeDelete($record);
         if (PEAR::isError($res)) {
             return $res;
         }
     }
     // do the deleting
     $keys =& $record->_table->keys();
     if (!$keys || count($keys) == 0) {
         trigger_error(df_translate('scripts.Dataface.IO.delete.ERROR_NO_PRIMARY_KEY', 'Could not delete record from table "' . $record->_table->tablename . '" because no primary key was defined.', array('tablename' => $record->_table->tablename)));
         exit;
     }
     $query = array();
     foreach (array_keys($keys) as $key) {
         if (!$record->strval($key)) {
             return PEAR::raiseError(Dataface_LanguageTool::translate('Could not delete record because missing keys', 'Could not delete record ' . $record->getTitle() . ' because not all of the keys were included.', array('title' => $record->getTitle(), 'key' => $key)), DATAFACE_E_DELETE_FAILED);
         }
         $query[$key] = '=' . $record->strval($key);
     }
     $sql = $builder->delete($query);
     if (PEAR::isError($sql)) {
         return $sql;
     }
     //$res = mysql_query($sql);
     $res = $this->dbObj->query($sql, null, $this->lang);
     if (!$res || PEAR::isError($res)) {
         if (PEAR::isError($res)) {
             $msg = $res->getMessage();
         } else {
             $msg = mysql_error(df_db());
         }
         return PEAR::raiseError(Dataface_LanguageTool::translate('Failed to delete record. SQL error', 'Failed to delete record ' . $record->getTitle() . ' because of an sql error. ' . mysql_error(df_db()), array('title' => $record->getTitle(), 'sql' => $sql, 'mysql_error' => $msg)), DATAFACE_E_DELETE_FAILED);
     }
     $parentIO =& $this->getParentIO();
     if (isset($parentIO)) {
         $parentRecord =& $record->getParentRecord();
         if (isset($parentRecord)) {
             $res = $parentIO->delete($parentRecord, $secure);
             if (PEAR::isError($res)) {
                 return $res;
             }
         }
     }
     if ($this->fireTriggers) {
         $res2 = $this->fireAfterDelete($record);
         if (PEAR::isError($res2)) {
             return $res2;
         }
     }
     self::touchTable($this->_table->tablename);
     return $res;
 }
예제 #2
0
 function test_query_builder_delete()
 {
     $builder = new Dataface_QueryBuilder('Profiles');
     $s =& $this->table1;
     $this->assertEquals($builder->delete(), "DELETE FROM `Profiles`");
     $this->assertEquals($builder->delete(array('-skip' => 5, '-limit' => 2)), "DELETE FROM `Profiles` LIMIT 5,2");
     $this->assertEquals($builder->delete(array('-skip' => 5, '-limit' => 2, 'fname' => 'John')), "DELETE FROM `Profiles` WHERE `Profiles`.`fname` LIKE '%John%' LIMIT 5,2");
 }