This commit is contained in:
fogelito
2026-01-20 13:42:22 +02:00
parent 7d5d97e53b
commit 50673c3223
4 changed files with 113 additions and 34 deletions
+1 -1
View File
@@ -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';
+13 -27
View File
@@ -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:
+6 -6
View File
@@ -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;
}
}