mirror of
https://github.com/appwrite/appwrite.git
synced 2026-05-26 13:51:13 +00:00
Filters
This commit is contained in:
@@ -44,7 +44,7 @@ const APP_RESOURCE_TOKEN_ACCESS = 24 * 60 * 60; // 24 hours
|
||||
const APP_FILE_ACCESS = 24 * 60 * 60; // 24 hours
|
||||
const APP_CACHE_UPDATE = 24 * 60 * 60; // 24 hours
|
||||
const APP_CACHE_BUSTER = 4321;
|
||||
const APP_VERSION_STABLE = '1.8.1';
|
||||
const APP_VERSION_STABLE = '1.10.0'; // old => 1.8.1
|
||||
const APP_DATABASE_ATTRIBUTE_EMAIL = 'email';
|
||||
const APP_DATABASE_ATTRIBUTE_ENUM = 'enum';
|
||||
const APP_DATABASE_ATTRIBUTE_IP = 'ip';
|
||||
|
||||
@@ -67,19 +67,8 @@ class V17 extends Filter
|
||||
$parsed = [];
|
||||
foreach ($content['queries'] as $query) {
|
||||
try {
|
||||
/** @var Query|Query[] $queries */
|
||||
$queries = $this->parseQuery($query);
|
||||
|
||||
/**
|
||||
* select query will return as an array of select queries
|
||||
*/
|
||||
if ($queries instanceof Query) {
|
||||
$queries = [$queries];
|
||||
}
|
||||
|
||||
foreach ($queries as $q) {
|
||||
$parsed[] = json_encode(array_filter($q->toArray()));
|
||||
}
|
||||
$query = $this->parseQuery($query);
|
||||
$parsed[] = \json_encode(\array_filter($query->toArray()));
|
||||
} catch (\Throwable $th) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $th->getMessage());
|
||||
}
|
||||
@@ -91,13 +80,7 @@ class V17 extends Filter
|
||||
}
|
||||
|
||||
// 1.4 query parser
|
||||
|
||||
/**
|
||||
* @param string $filter
|
||||
* @return Query|array
|
||||
* @throws \Utopia\Database\Exception\Query
|
||||
*/
|
||||
public function parseQuery(string $filter): Query|array
|
||||
public function parseQuery(string $filter): Query
|
||||
{
|
||||
// Init empty vars we fill later
|
||||
$method = '';
|
||||
@@ -272,15 +255,18 @@ class V17 extends Filter
|
||||
]);
|
||||
|
||||
case Query::TYPE_BETWEEN:
|
||||
return Query::between($parsedParams[0], $parsedParams[1], $parsedParams[2]);
|
||||
return Query::parseQuery([
|
||||
'method' => $method,
|
||||
'attribute' => $parsedParams[0],
|
||||
'values' => [$parsedParams[1], $parsedParams[2]],
|
||||
]);
|
||||
|
||||
|
||||
case Query::TYPE_SELECT:
|
||||
$selects = [];
|
||||
foreach ($parsedParams[0] as $attribute) {
|
||||
$selects[] = Query::select($attribute);
|
||||
}
|
||||
|
||||
return $selects;
|
||||
return Query::parseQuery([
|
||||
'method' => $method,
|
||||
'values' => $parsedParams[0],
|
||||
]);
|
||||
|
||||
case Query::TYPE_ORDER_ASC:
|
||||
case Query::TYPE_ORDER_DESC:
|
||||
|
||||
@@ -58,8 +58,7 @@ class V20 extends Filter
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $e->getMessage());
|
||||
}
|
||||
|
||||
//$selections = Query::groupByType($parsed)['selections'] ?? [];
|
||||
$selections = Query::getSelectQueries($parsed);
|
||||
$selections = Query::groupByType($parsed)['selections'] ?? [];
|
||||
|
||||
// Check if we need to add wildcard + relationships
|
||||
// This happens when:
|
||||
@@ -68,7 +67,7 @@ class V20 extends Filter
|
||||
$needsRelationships = empty($selections);
|
||||
if (!$needsRelationships) {
|
||||
foreach ($selections as $select) {
|
||||
if ($select->getAttribute() === '*') {
|
||||
if (\in_array('*', $select->getValues(), true)) {
|
||||
$needsRelationships = true;
|
||||
break;
|
||||
}
|
||||
@@ -89,9 +88,10 @@ class V20 extends Filter
|
||||
);
|
||||
|
||||
// Add wildcard + relationship(s) selects
|
||||
foreach ($selects as $select) {
|
||||
$parsed[] = Query::select($select);
|
||||
}
|
||||
$parsed[] = Query::parseQuery([
|
||||
'method' => Query::TYPE_SELECT,
|
||||
'values' => $selects,
|
||||
]);
|
||||
}
|
||||
|
||||
$resolvedQueries = [];
|
||||
|
||||
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
namespace Appwrite\Utopia\Request\Filters;
|
||||
|
||||
use Appwrite\Extend\Exception;
|
||||
use Appwrite\Utopia\Request\Filter;
|
||||
use Utopia\Database\Query;
|
||||
|
||||
class V22 extends Filter
|
||||
{
|
||||
protected const CHAR_SINGLE_QUOTE = '\'';
|
||||
protected const CHAR_DOUBLE_QUOTE = '"';
|
||||
protected const CHAR_COMMA = ',';
|
||||
protected const CHAR_SPACE = ' ';
|
||||
protected const CHAR_BRACKET_START = '[';
|
||||
protected const CHAR_BRACKET_END = ']';
|
||||
protected const CHAR_PARENTHESES_START = '(';
|
||||
protected const CHAR_PARENTHESES_END = ')';
|
||||
protected const CHAR_BACKSLASH = '\\';
|
||||
|
||||
// Convert 1.4 params to 1.5
|
||||
public function parse(array $content, string $model): array
|
||||
{
|
||||
switch ($model) {
|
||||
case 'account.listIdentities':
|
||||
case 'account.listLogs':
|
||||
case 'databases.list':
|
||||
case 'databases.listLogs':
|
||||
case 'databases.listCollections':
|
||||
case 'databases.listCollectionLogs':
|
||||
case 'databases.listAttributes':
|
||||
case 'databases.listIndexes':
|
||||
case 'databases.listDocuments':
|
||||
case 'databases.getDocument':
|
||||
case 'databases.listDocumentLogs':
|
||||
case 'functions.list':
|
||||
case 'functions.listDeployments':
|
||||
case 'functions.listExecutions':
|
||||
case 'migrations.list':
|
||||
case 'projects.list':
|
||||
case 'proxy.listRules':
|
||||
case 'storage.listBuckets':
|
||||
case 'storage.listFiles':
|
||||
case 'teams.list':
|
||||
case 'teams.listMemberships':
|
||||
case 'teams.listLogs':
|
||||
case 'users.list':
|
||||
case 'users.listLogs':
|
||||
case 'users.listIdentities':
|
||||
case 'vcs.listInstallations':
|
||||
$content = $this->convertQueries($content);
|
||||
break;
|
||||
}
|
||||
return $content;
|
||||
}
|
||||
|
||||
private function convertQueries(array $content): array
|
||||
{
|
||||
var_dump('convertQueries');
|
||||
|
||||
if (!isset($content['queries'])) {
|
||||
return $content;
|
||||
}
|
||||
|
||||
$queries = [];
|
||||
|
||||
/** @var Query $query */
|
||||
|
||||
foreach ($content['queries'] as $query) {
|
||||
try {
|
||||
var_dump($query);
|
||||
|
||||
if ($query->getMethod() === 'select') {
|
||||
$selects = $query->getValue();
|
||||
|
||||
foreach ($selects as $select) {
|
||||
$queries[] = Query::select($select);
|
||||
}
|
||||
}
|
||||
else {
|
||||
$queries[] = $query;
|
||||
}
|
||||
|
||||
} catch (\Throwable $th) {
|
||||
throw new Exception(Exception::GENERAL_QUERY_INVALID, $th->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
$content['queries'] = $queries;
|
||||
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user