Commit 76b86559 authored by pi0's avatar pi0

Backward compability

parent fe278ac6
......@@ -14,6 +14,9 @@ class MongodbServiceProvider extends ServiceProvider
Model::setConnectionResolver($this->app['db']);
Model::setEventDispatcher($this->app['events']);
$s=explode('.',\Illuminate\Foundation\Application::VERSION);
define('SHOULD_RETURN_COLLECTION',(10*$s[0]+$s[1])>=53);
}
/**
......
......@@ -11,6 +11,7 @@ use MongoDB\BSON\ObjectID;
use MongoDB\BSON\Regex;
use MongoDB\BSON\UTCDateTime;
class Builder extends BaseBuilder
{
/**
......@@ -69,12 +70,12 @@ class Builder extends BaseBuilder
* @var array
*/
protected $conversion = [
'=' => '=',
'=' => '=',
'!=' => '$ne',
'<>' => '$ne',
'<' => '$lt',
'<' => '$lt',
'<=' => '$lte',
'>' => '$gt',
'>' => '$gt',
'>=' => '$gte',
];
......@@ -82,7 +83,7 @@ class Builder extends BaseBuilder
* Create a new query builder instance.
*
* @param Connection $connection
* @param Processor $processor
* @param Processor $processor
*/
public function __construct(Connection $connection, Processor $processor)
{
......@@ -94,7 +95,7 @@ class Builder extends BaseBuilder
/**
* Set the projections.
*
* @param array $columns
* @param array $columns
* @return $this
*/
public function project($columns)
......@@ -133,8 +134,8 @@ class Builder extends BaseBuilder
/**
* Execute a query for a single record by ID.
*
* @param mixed $id
* @param array $columns
* @param mixed $id
* @param array $columns
* @return mixed
*/
public function find($id, $columns = [])
......@@ -145,7 +146,7 @@ class Builder extends BaseBuilder
/**
* Execute the query as a "select" statement.
*
* @param array $columns
* @param array $columns
* @return array|static[]|Collection
*/
public function get($columns = [])
......@@ -156,7 +157,7 @@ class Builder extends BaseBuilder
/**
* Execute the query as a fresh "select" statement.
*
* @param array $columns
* @param array $columns
* @return array|static[]|Collection
*/
public function getFresh($columns = [])
......@@ -207,8 +208,7 @@ class Builder extends BaseBuilder
// Translate count into sum.
if ($function == 'count') {
$group['aggregate'] = ['$sum' => 1];
}
// Pass other functions directly.
} // Pass other functions directly.
else {
$group['aggregate'] = ['$' . $function => '$' . $column];
}
......@@ -259,10 +259,8 @@ class Builder extends BaseBuilder
$results = iterator_to_array($this->collection->aggregate($pipeline, $options));
// Return results
return new Collection($results);
}
// Distinct query
return SHOULD_RETURN_COLLECTION ? new Collection($results) : $results;
} // Distinct query
elseif ($this->distinct) {
// Return distinct results directly
$column = isset($this->columns[0]) ? $this->columns[0] : '_id';
......@@ -274,10 +272,8 @@ class Builder extends BaseBuilder
$result = $this->collection->distinct($column);
}
return new Collection($result);
}
// Normal query
return SHOULD_RETURN_COLLECTION ? new Collection($result) : $result;
} // Normal query
else {
$columns = [];
......@@ -317,7 +313,8 @@ class Builder extends BaseBuilder
$cursor = $this->collection->find($wheres, $options);
// Return results as an array with numeric keys
return new Collection(iterator_to_array($cursor, false));
$results = iterator_to_array($cursor, false);
return SHOULD_RETURN_COLLECTION ? new Collection($results) : $results;
}
}
......@@ -331,13 +328,13 @@ class Builder extends BaseBuilder
$key = [
'connection' => $this->collection->getDatabaseName(),
'collection' => $this->collection->getCollectionName(),
'wheres' => $this->wheres,
'columns' => $this->columns,
'groups' => $this->groups,
'orders' => $this->orders,
'offset' => $this->offset,
'limit' => $this->limit,
'aggregate' => $this->aggregate,
'wheres' => $this->wheres,
'columns' => $this->columns,
'groups' => $this->groups,
'orders' => $this->orders,
'offset' => $this->offset,
'limit' => $this->limit,
'aggregate' => $this->aggregate,
];
return md5(serialize(array_values($key)));
......@@ -346,8 +343,8 @@ class Builder extends BaseBuilder
/**
* Execute an aggregate function on the database.
*
* @param string $function
* @param array $columns
* @param string $function
* @param array $columns
* @return mixed
*/
public function aggregate($function, $columns = [])
......@@ -363,7 +360,7 @@ class Builder extends BaseBuilder
$this->aggregate = null;
if (isset($results[0])) {
$result = (array) $results[0];
$result = (array)$results[0];
return $result['aggregate'];
}
......@@ -376,7 +373,7 @@ class Builder extends BaseBuilder
*/
public function exists()
{
return ! is_null($this->first());
return !is_null($this->first());
}
/**
......@@ -398,8 +395,8 @@ class Builder extends BaseBuilder
/**
* Add an "order by" clause to the query.
*
* @param string $column
* @param string $direction
* @param string $column
* @param string $direction
* @return Builder
*/
public function orderBy($column, $direction = 'asc')
......@@ -420,10 +417,10 @@ class Builder extends BaseBuilder
/**
* Add a where between statement to the query.
*
* @param string $column
* @param array $values
* @param string $boolean
* @param bool $not
* @param string $column
* @param array $values
* @param string $boolean
* @param bool $not
* @return Builder
*/
public function whereBetween($column, array $values, $boolean = 'and', $not = false)
......@@ -438,8 +435,8 @@ class Builder extends BaseBuilder
/**
* Set the limit and offset for a given page.
*
* @param int $page
* @param int $perPage
* @param int $page
* @param int $perPage
* @return \Illuminate\Database\Query\Builder|static
*/
public function forPage($page, $perPage = 15)
......@@ -452,7 +449,7 @@ class Builder extends BaseBuilder
/**
* Insert a new record into the database.
*
* @param array $values
* @param array $values
* @return bool
*/
public function insert(array $values)
......@@ -464,34 +461,34 @@ class Builder extends BaseBuilder
foreach ($values as $value) {
// As soon as we find a value that is not an array we assume the user is
// inserting a single document.
if (! is_array($value)) {
if (!is_array($value)) {
$batch = false;
break;
}
}
if (! $batch) {
if (!$batch) {
$values = [$values];
}
// Batch insert
$result = $this->collection->insertMany($values);
return (1 == (int) $result->isAcknowledged());
return (1 == (int)$result->isAcknowledged());
}
/**
* Insert a new record and get the value of the primary key.
*
* @param array $values
* @param string $sequence
* @param array $values
* @param string $sequence
* @return int
*/
public function insertGetId(array $values, $sequence = null)
{
$result = $this->collection->insertOne($values);
if (1 == (int) $result->isAcknowledged()) {
if (1 == (int)$result->isAcknowledged()) {
if (is_null($sequence)) {
$sequence = '_id';
}
......@@ -504,14 +501,14 @@ class Builder extends BaseBuilder
/**
* Update a record in the database.
*
* @param array $values
* @param array $options
* @param array $values
* @param array $options
* @return int
*/
public function update(array $values, array $options = [])
{
// Use $set as default operator.
if (! starts_with(key($values), '$')) {
if (!starts_with(key($values), '$')) {
$values = ['$set' => $values];
}
......@@ -521,16 +518,16 @@ class Builder extends BaseBuilder
/**
* Increment a column's value by a given amount.
*
* @param string $column
* @param int $amount
* @param array $extra
* @param string $column
* @param int $amount
* @param array $extra
* @return int
*/
public function increment($column, $amount = 1, array $extra = [], array $options = [])
{
$query = ['$inc' => [$column => $amount]];
if (! empty($extra)) {
if (!empty($extra)) {
$query['$set'] = $extra;
}
......@@ -547,9 +544,9 @@ class Builder extends BaseBuilder
/**
* Decrement a column's value by a given amount.
*
* @param string $column
* @param int $amount
* @param array $extra
* @param string $column
* @param int $amount
* @param array $extra
* @return int
*/
public function decrement($column, $amount = 1, array $extra = [], array $options = [])
......@@ -560,8 +557,8 @@ class Builder extends BaseBuilder
/**
* Get an array with the values of a given column.
*
* @param string $column
* @param string|null $key
* @param string $column
* @param string|null $key
* @return array
*/
public function pluck($column, $key = null)
......@@ -581,14 +578,14 @@ class Builder extends BaseBuilder
/**
* Delete a record from the database.
*
* @param mixed $id
* @param mixed $id
* @return int
*/
public function delete($id = null)
{
$wheres = $this->compileWheres();
$result = $this->collection->DeleteMany($wheres);
if (1 == (int) $result->isAcknowledged()) {
if (1 == (int)$result->isAcknowledged()) {
return $result->getDeletedCount();
}
......@@ -598,7 +595,7 @@ class Builder extends BaseBuilder
/**
* Set the collection which the query is targeting.
*
* @param string $collection
* @param string $collection
* @return Builder
*/
public function from($collection)
......@@ -617,14 +614,14 @@ class Builder extends BaseBuilder
{
$result = $this->collection->drop();
return (1 == (int) $result->ok);
return (1 == (int)$result->ok);
}
/**
* Get an array with the values of a given column.
*
* @param string $column
* @param string $key
* @param string $column
* @param string $key
* @return array
*/
public function lists($column, $key = null)
......@@ -634,7 +631,7 @@ class Builder extends BaseBuilder
// Convert ObjectID's to strings so that lists can do its work.
$results = $results->map(function ($item) {
$item['_id'] = (string) $item['_id'];
$item['_id'] = (string)$item['_id'];
return $item;
});
......@@ -648,7 +645,7 @@ class Builder extends BaseBuilder
/**
* Create a raw database expression.
*
* @param closure $expression
* @param closure $expression
* @return mixed
*/
public function raw($expression = null)
......@@ -656,10 +653,8 @@ class Builder extends BaseBuilder
// Execute the closure on the mongodb collection
if ($expression instanceof Closure) {
return call_user_func($expression, $this->collection);
}
// Create an expression for the given value
elseif (! is_null($expression)) {
} // Create an expression for the given value
elseif (!is_null($expression)) {
return new Expression($expression);
}
......@@ -670,8 +665,8 @@ class Builder extends BaseBuilder
/**
* Append one or more values to an array.
*
* @param mixed $column
* @param mixed $value
* @param mixed $column
* @param mixed $value
* @return int
*/
public function push($column, $value = null, $unique = false)
......@@ -696,8 +691,8 @@ class Builder extends BaseBuilder
/**
* Remove one or more values from an array.
*
* @param mixed $column
* @param mixed $value
* @param mixed $column
* @param mixed $value
* @return int
*/
public function pull($column, $value = null)
......@@ -725,7 +720,7 @@ class Builder extends BaseBuilder
*/
public function drop($columns)
{
if (! is_array($columns)) {
if (!is_array($columns)) {
$columns = [$columns];
}
......@@ -753,20 +748,20 @@ class Builder extends BaseBuilder
/**
* Perform an update query.
*
* @param array $query
* @param array $options
* @param array $query
* @param array $options
* @return int
*/
protected function performUpdate($query, array $options = [])
{
// Update multiple items by default.
if (! array_key_exists('multiple', $options)) {
if (!array_key_exists('multiple', $options)) {
$options['multiple'] = true;
}
$wheres = $this->compileWheres();
$result = $this->collection->UpdateMany($wheres, $query, $options);
if (1 == (int) $result->isAcknowledged()) {
if (1 == (int)$result->isAcknowledged()) {
return $result->getModifiedCount() ? $result->getModifiedCount() : $result->getUpsertedCount();
}
......@@ -791,10 +786,10 @@ class Builder extends BaseBuilder
/**
* Add a basic where clause to the query.
*
* @param string $column
* @param string $operator
* @param mixed $value
* @param string $boolean
* @param string $column
* @param string $operator
* @param mixed $value
* @param string $boolean
* @return \Illuminate\Database\Query\Builder|static
*
* @throws \InvalidArgumentException
......@@ -835,14 +830,14 @@ class Builder extends BaseBuilder
// Operator conversions
$convert = [
'regexp' => 'regex',
'elemmatch' => 'elemMatch',
'regexp' => 'regex',
'elemmatch' => 'elemMatch',
'geointersects' => 'geoIntersects',
'geowithin' => 'geoWithin',
'nearsphere' => 'nearSphere',
'maxdistance' => 'maxDistance',
'centersphere' => 'centerSphere',
'uniquedocs' => 'uniqueDocs',
'geowithin' => 'geoWithin',
'nearsphere' => 'nearSphere',
'maxdistance' => 'maxDistance',
'centersphere' => 'centerSphere',
'uniquedocs' => 'uniqueDocs',
];
if (array_key_exists($where['operator'], $convert)) {
......@@ -857,9 +852,7 @@ class Builder extends BaseBuilder
foreach ($where['values'] as &$value) {
$value = $this->convertKey($value);
}
}
// Single value.
} // Single value.
elseif (isset($where['value'])) {
$where['value'] = $this->convertKey($where['value']);
}
......@@ -911,20 +904,18 @@ class Builder extends BaseBuilder
$regex = preg_replace('#(^|[^\\\])%#', '$1.*', preg_quote($value));
// Convert like to regular expression.
if (! starts_with($value, '%')) {
if (!starts_with($value, '%')) {
$regex = '^' . $regex;
}
if (! ends_with($value, '%')) {
if (!ends_with($value, '%')) {
$regex = $regex . '$';
}
$value = new Regex($regex, 'i');
}
// Manipulate regexp operations.
} // Manipulate regexp operations.
elseif (in_array($operator, ['regexp', 'not regexp', 'regex', 'not regex'])) {
// Automatically convert regular expression strings to Regex objects.
if (! $value instanceof Regex) {
if (!$value instanceof Regex) {
$e = explode('/', $value);
$flag = end($e);
$regstr = substr($value, 1, -(strlen($flag) + 1));
......@@ -938,7 +929,7 @@ class Builder extends BaseBuilder
}
}
if (! isset($operator) or $operator == '=') {
if (!isset($operator) or $operator == '=') {
$query = [$column => $value];
} elseif (array_key_exists($operator, $this->conversion)) {
$query = [$column => [$this->conversion[$operator] => $value]];
......@@ -1023,8 +1014,8 @@ class Builder extends BaseBuilder
/**
* Handle dynamic method calls into the method.
*
* @param string $method
* @param array $parameters
* @param string $method
* @param array $parameters
* @return mixed
*/
public function __call($method, $parameters)
......@@ -1035,4 +1026,4 @@ class Builder extends BaseBuilder
return parent::__call($method, $parameters);
}
}
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment