Browse Source

Default options setup added to Mongo Collection operations.

tags/2.0.0-beta
Paul Klimov 11 years ago
parent
commit
a39b2d3799
  1. 12
      extensions/mongo/ActiveRecord.php
  2. 14
      extensions/mongo/Collection.php
  3. 6
      tests/unit/extensions/mongo/CollectionTest.php

12
extensions/mongo/ActiveRecord.php

@ -134,10 +134,6 @@ abstract class ActiveRecord extends Model
*/
public static function updateAll($attributes, $condition = [], $options = [])
{
$options['w'] = 1;
if (!array_key_exists('multiple', $options)) {
$options['multiple'] = true;
}
return static::getCollection()->update($condition, $attributes, $options);
}
@ -158,10 +154,6 @@ abstract class ActiveRecord extends Model
*/
public static function updateAllCounters($counters, $condition = [], $options = [])
{
$options['w'] = 1;
if (!array_key_exists('multiple', $options)) {
$options['multiple'] = true;
}
return static::getCollection()->update($condition, ['$inc' => $counters], $options);
}
@ -798,7 +790,7 @@ abstract class ActiveRecord extends Model
}
// We do not check the return value of update() because it's possible
// that it doesn't change anything and thus returns 0.
$rows = static::getCollection()->update($condition, $values, ['w' => 1]);
$rows = static::getCollection()->update($condition, $values);
if ($lock !== null && !$rows) {
throw new StaleObjectException('The object being updated is outdated.');
@ -871,7 +863,7 @@ abstract class ActiveRecord extends Model
if ($lock !== null) {
$condition[$lock] = $this->$lock;
}
$result = static::getCollection()->remove($condition, ['w' => 1]);
$result = static::getCollection()->remove($condition);
if ($lock !== null && !$result) {
throw new StaleObjectException('The object being deleted is outdated.');
}

14
extensions/mongo/Collection.php

@ -70,6 +70,7 @@ class Collection extends Object
Yii::info($token, __METHOD__);
try {
Yii::beginProfile($token, __METHOD__);
$options = array_merge(['w' => 1], $options);
$this->tryResultError($this->mongoCollection->insert($data, $options));
Yii::endProfile($token, __METHOD__);
return is_array($data) ? $data['_id'] : $data->_id;
@ -92,6 +93,7 @@ class Collection extends Object
Yii::info($token, __METHOD__);
try {
Yii::beginProfile($token, __METHOD__);
$options = array_merge(['w' => 1], $options);
$this->tryResultError($this->mongoCollection->batchInsert($rows, $options));
Yii::endProfile($token, __METHOD__);
return $rows;
@ -115,7 +117,15 @@ class Collection extends Object
Yii::info($token, __METHOD__);
try {
Yii::beginProfile($token, __METHOD__);
$result = $this->mongoCollection->update($this->buildCondition($condition), $newData, $options);
$options = array_merge(['w' => 1, 'multiple' => true], $options);
if ($options['multiple']) {
$keys = array_keys($newData);
if (!empty($keys) && strncmp('$', $keys[0], 1) !== 0) {
$newData = ['$set' => $newData];
}
}
$condition = $this->buildCondition($condition);
$result = $this->mongoCollection->update($condition, $newData, $options);
$this->tryResultError($result);
Yii::endProfile($token, __METHOD__);
if (is_array($result) && array_key_exists('n', $result)) {
@ -142,6 +152,7 @@ class Collection extends Object
Yii::info($token, __METHOD__);
try {
Yii::beginProfile($token, __METHOD__);
$options = array_merge(['w' => 1], $options);
$this->tryResultError($this->mongoCollection->save($data, $options));
Yii::endProfile($token, __METHOD__);
return is_array($data) ? $data['_id'] : $data->_id;
@ -164,6 +175,7 @@ class Collection extends Object
Yii::info($token, __METHOD__);
try {
Yii::beginProfile($token, __METHOD__);
$options = array_merge(['w' => 1, 'multiple' => true], $options);
$result = $this->mongoCollection->remove($this->buildCondition($condition), $options);
$this->tryResultError($result);
Yii::endProfile($token, __METHOD__);

6
tests/unit/extensions/mongo/CollectionTest.php

@ -117,7 +117,8 @@ class CollectionTest extends MongoTestCase
];
$id = $collection->insert($data);
$collection->remove(['_id' => $id]);
$count = $collection->remove(['_id' => $id]);
$this->assertEquals(1, $count);
$rows = $collection->findAll();
$this->assertEquals(0, count($rows));
@ -138,7 +139,8 @@ class CollectionTest extends MongoTestCase
$newData = [
'name' => 'new name'
];
$collection->update(['_id' => $id], $newData);
$count = $collection->update(['_id' => $id], $newData);
$this->assertEquals(1, $count);
list($row) = $collection->findAll();
$this->assertEquals($newData['name'], $row['name']);

Loading…
Cancel
Save