|  |  |  | @ -667,36 +667,33 @@ class ActiveRecord extends Model | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	public function insert($runValidation = true, $attributes = null) | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($runValidation && !$this->validate($attributes)) { | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($runValidation && !$this->validate($attributes) || !$this->beforeSave(true)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			return false; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($this->beforeSave(true)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			$values = $this->getDirtyAttributes($attributes); | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($values === array()) { | 
			
		
	
		
			
				
					|  |  |  |  | 				foreach ($this->primaryKey() as $key) { | 
			
		
	
		
			
				
					|  |  |  |  | 					$values[$key] = isset($this->_attributes[$key]) ? $this->_attributes[$key] : null; | 
			
		
	
		
			
				
					|  |  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  |  | 		$values = $this->getDirtyAttributes($attributes); | 
			
		
	
		
			
				
					|  |  |  |  | 		if (empty($values)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			foreach ($this->primaryKey() as $key) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$values[$key] = isset($this->_attributes[$key]) ? $this->_attributes[$key] : null; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 			$db = static::getDb(); | 
			
		
	
		
			
				
					|  |  |  |  | 			$command = $db->createCommand()->insert($this->tableName(), $values); | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($command->execute()) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$table = $this->getTableSchema(); | 
			
		
	
		
			
				
					|  |  |  |  | 				if ($table->sequenceName !== null) { | 
			
		
	
		
			
				
					|  |  |  |  | 					foreach ($table->primaryKey as $name) { | 
			
		
	
		
			
				
					|  |  |  |  | 						if (!isset($this->_attributes[$name])) { | 
			
		
	
		
			
				
					|  |  |  |  | 							$this->_oldAttributes[$name] = $this->_attributes[$name] = $db->getLastInsertID($table->sequenceName); | 
			
		
	
		
			
				
					|  |  |  |  | 							break; | 
			
		
	
		
			
				
					|  |  |  |  | 						} | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		$db = static::getDb(); | 
			
		
	
		
			
				
					|  |  |  |  | 		$command = $db->createCommand()->insert($this->tableName(), $values); | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($command->execute()) { | 
			
		
	
		
			
				
					|  |  |  |  | 			$table = $this->getTableSchema(); | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($table->sequenceName !== null) { | 
			
		
	
		
			
				
					|  |  |  |  | 				foreach ($table->primaryKey as $name) { | 
			
		
	
		
			
				
					|  |  |  |  | 					if (!isset($this->_attributes[$name])) { | 
			
		
	
		
			
				
					|  |  |  |  | 						$this->_oldAttributes[$name] = $this->_attributes[$name] = $db->getLastInsertID($table->sequenceName); | 
			
		
	
		
			
				
					|  |  |  |  | 						break; | 
			
		
	
		
			
				
					|  |  |  |  | 					} | 
			
		
	
		
			
				
					|  |  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  |  | 				foreach ($values as $name => $value) { | 
			
		
	
		
			
				
					|  |  |  |  | 					$this->_oldAttributes[$name] = $value; | 
			
		
	
		
			
				
					|  |  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  |  | 				$this->afterSave(true); | 
			
		
	
		
			
				
					|  |  |  |  | 				return true; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 			foreach ($values as $name => $value) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$this->_oldAttributes[$name] = $value; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 			$this->afterSave(true); | 
			
		
	
		
			
				
					|  |  |  |  | 			return true; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		return false; | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 	/** | 
			
		
	
	
		
			
				
					|  |  |  | @ -750,39 +747,35 @@ class ActiveRecord extends Model | 
			
		
	
		
			
				
					|  |  |  |  | 	 */ | 
			
		
	
		
			
				
					|  |  |  |  | 	public function update($runValidation = true, $attributes = null) | 
			
		
	
		
			
				
					|  |  |  |  | 	{ | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($runValidation && !$this->validate($attributes)) { | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($runValidation && !$this->validate($attributes) || !$this->beforeSave(false)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			return false; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 		if ($this->beforeSave(false)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			$values = $this->getDirtyAttributes($attributes); | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($values !== array()) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$condition = $this->getOldPrimaryKey(true); | 
			
		
	
		
			
				
					|  |  |  |  | 				$lock = $this->optimisticLock(); | 
			
		
	
		
			
				
					|  |  |  |  | 				if ($lock !== null) { | 
			
		
	
		
			
				
					|  |  |  |  | 					if (!isset($values[$lock])) { | 
			
		
	
		
			
				
					|  |  |  |  | 						$values[$lock] = $this->$lock + 1; | 
			
		
	
		
			
				
					|  |  |  |  | 					} | 
			
		
	
		
			
				
					|  |  |  |  | 					$condition[$lock] = $this->$lock; | 
			
		
	
		
			
				
					|  |  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  |  | 				// We do not check the return value of updateAll() because it's possible | 
			
		
	
		
			
				
					|  |  |  |  | 				// that the UPDATE statement doesn't change anything and thus returns 0. | 
			
		
	
		
			
				
					|  |  |  |  | 				$rows = $this->updateAll($values, $condition); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 				if ($lock !== null && !$rows) { | 
			
		
	
		
			
				
					|  |  |  |  | 					throw new StaleObjectException('The object being updated is outdated.'); | 
			
		
	
		
			
				
					|  |  |  |  | 		$values = $this->getDirtyAttributes($attributes); | 
			
		
	
		
			
				
					|  |  |  |  | 		if (!empty($values)) { | 
			
		
	
		
			
				
					|  |  |  |  | 			$condition = $this->getOldPrimaryKey(true); | 
			
		
	
		
			
				
					|  |  |  |  | 			$lock = $this->optimisticLock(); | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($lock !== null) { | 
			
		
	
		
			
				
					|  |  |  |  | 				if (!isset($values[$lock])) { | 
			
		
	
		
			
				
					|  |  |  |  | 					$values[$lock] = $this->$lock + 1; | 
			
		
	
		
			
				
					|  |  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  |  | 				$condition[$lock] = $this->$lock; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 			// We do not check the return value of updateAll() because it's possible | 
			
		
	
		
			
				
					|  |  |  |  | 			// that the UPDATE statement doesn't change anything and thus returns 0. | 
			
		
	
		
			
				
					|  |  |  |  | 			$rows = $this->updateAll($values, $condition); | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 				foreach ($values as $name => $value) { | 
			
		
	
		
			
				
					|  |  |  |  | 					$this->_oldAttributes[$name] = $this->_attributes[$name]; | 
			
		
	
		
			
				
					|  |  |  |  | 				} | 
			
		
	
		
			
				
					|  |  |  |  | 			if ($lock !== null && !$rows) { | 
			
		
	
		
			
				
					|  |  |  |  | 				throw new StaleObjectException('The object being updated is outdated.'); | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 				$this->afterSave(false); | 
			
		
	
		
			
				
					|  |  |  |  | 				return $rows; | 
			
		
	
		
			
				
					|  |  |  |  | 			} else { | 
			
		
	
		
			
				
					|  |  |  |  | 				return 0; | 
			
		
	
		
			
				
					|  |  |  |  | 			foreach ($values as $name => $value) { | 
			
		
	
		
			
				
					|  |  |  |  | 				$this->_oldAttributes[$name] = $this->_attributes[$name]; | 
			
		
	
		
			
				
					|  |  |  |  | 			} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |  | 			$this->afterSave(false); | 
			
		
	
		
			
				
					|  |  |  |  | 			return $rows; | 
			
		
	
		
			
				
					|  |  |  |  | 		} else { | 
			
		
	
		
			
				
					|  |  |  |  | 			return false; | 
			
		
	
		
			
				
					|  |  |  |  | 			return 0; | 
			
		
	
		
			
				
					|  |  |  |  | 		} | 
			
		
	
		
			
				
					|  |  |  |  | 	} | 
			
		
	
		
			
				
					|  |  |  |  | 
 | 
			
		
	
	
		
			
				
					|  |  |  | 
 |