Merge pull request #3060 from appwrite/fix-failed-indexes-query
Fix: Failed indexes in queries
This commit is contained in:
commit
6e396ebdd7
3 changed files with 59 additions and 1 deletions
|
@ -19,7 +19,6 @@ use Utopia\Database\Validator\Authorization;
|
||||||
use Utopia\Database\Validator\Key;
|
use Utopia\Database\Validator\Key;
|
||||||
use Utopia\Database\Validator\Permissions;
|
use Utopia\Database\Validator\Permissions;
|
||||||
use Utopia\Database\Validator\QueryValidator;
|
use Utopia\Database\Validator\QueryValidator;
|
||||||
use Utopia\Database\Validator\Queries as QueriesValidator;
|
|
||||||
use Utopia\Database\Validator\Structure;
|
use Utopia\Database\Validator\Structure;
|
||||||
use Utopia\Database\Validator\UID;
|
use Utopia\Database\Validator\UID;
|
||||||
use Utopia\Database\Exception\Authorization as AuthorizationException;
|
use Utopia\Database\Exception\Authorization as AuthorizationException;
|
||||||
|
@ -31,6 +30,8 @@ use Appwrite\Network\Validator\Email;
|
||||||
use Appwrite\Network\Validator\IP;
|
use Appwrite\Network\Validator\IP;
|
||||||
use Appwrite\Network\Validator\URL;
|
use Appwrite\Network\Validator\URL;
|
||||||
use Appwrite\Utopia\Database\Validator\CustomId;
|
use Appwrite\Utopia\Database\Validator\CustomId;
|
||||||
|
use Appwrite\Utopia\Database\Validator\Queries as QueriesValidator;
|
||||||
|
use Appwrite\Utopia\Database\Validator\OrderAttributes as OrderAttributesValidator;
|
||||||
use Appwrite\Utopia\Response;
|
use Appwrite\Utopia\Response;
|
||||||
use Appwrite\Detector\Detector;
|
use Appwrite\Detector\Detector;
|
||||||
use Appwrite\Event\Event;
|
use Appwrite\Event\Event;
|
||||||
|
@ -1742,6 +1743,13 @@ App::get('/v1/database/collections/:collectionId/documents')
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!empty($orderAttributes)) {
|
||||||
|
$validator = new OrderAttributesValidator($collection->getAttribute('attributes', []), $collection->getAttribute('indexes', []), true);
|
||||||
|
if (!$validator->isValid($orderAttributes)) {
|
||||||
|
throw new Exception($validator->getDescription(), 400, Exception::GENERAL_QUERY_INVALID);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$cursorDocument = null;
|
$cursorDocument = null;
|
||||||
if (!empty($cursor)) {
|
if (!empty($cursor)) {
|
||||||
$cursorDocument = $collection->getAttribute('permission') === 'collection'
|
$cursorDocument = $collection->getAttribute('permission') === 'collection'
|
||||||
|
|
25
src/Appwrite/Utopia/Database/Validator/OrderAttributes.php
Normal file
25
src/Appwrite/Utopia/Database/Validator/OrderAttributes.php
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
namespace Appwrite\Utopia\Database\Validator;
|
||||||
|
|
||||||
|
use Utopia\Database\Document;
|
||||||
|
use Utopia\Database\Validator\OrderAttributes as ValidatorOrderAttributes;
|
||||||
|
|
||||||
|
class OrderAttributes extends ValidatorOrderAttributes
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Expression constructor
|
||||||
|
*
|
||||||
|
* @param Document[] $attributes
|
||||||
|
* @param Document[] $indexes
|
||||||
|
* @param bool $strict
|
||||||
|
*/
|
||||||
|
public function __construct($attributes, $indexes, $strict)
|
||||||
|
{
|
||||||
|
// Remove failed/stuck/processing indexes
|
||||||
|
$indexes = \array_filter($indexes, function($index) {
|
||||||
|
return $index->getAttribute('status') === 'available';
|
||||||
|
});
|
||||||
|
|
||||||
|
parent::__construct($attributes, $indexes, $strict);
|
||||||
|
}
|
||||||
|
}
|
25
src/Appwrite/Utopia/Database/Validator/Queries.php
Normal file
25
src/Appwrite/Utopia/Database/Validator/Queries.php
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
<?php
|
||||||
|
namespace Appwrite\Utopia\Database\Validator;
|
||||||
|
|
||||||
|
use Utopia\Database\Document;
|
||||||
|
use Utopia\Database\Validator\Queries as ValidatorQueries;
|
||||||
|
|
||||||
|
class Queries extends ValidatorQueries
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* Expression constructor
|
||||||
|
*
|
||||||
|
* @param Document[] $attributes
|
||||||
|
* @param Document[] $indexes
|
||||||
|
* @param bool $strict
|
||||||
|
*/
|
||||||
|
public function __construct($attributes, $indexes, $strict)
|
||||||
|
{
|
||||||
|
// Remove failed/stuck/processing indexes
|
||||||
|
$indexes = \array_filter($indexes, function($index) {
|
||||||
|
return $index->getAttribute('status') === 'available';
|
||||||
|
});
|
||||||
|
|
||||||
|
parent::__construct($attributes, $indexes, $strict);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue