diff --git a/app/init/constants.php b/app/init/constants.php index e05f31e078..c0da17df35 100644 --- a/app/init/constants.php +++ b/app/init/constants.php @@ -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'; diff --git a/src/Appwrite/Utopia/Request/Filters/V17.php b/src/Appwrite/Utopia/Request/Filters/V17.php index b1802b1a98..d6e82143d8 100644 --- a/src/Appwrite/Utopia/Request/Filters/V17.php +++ b/src/Appwrite/Utopia/Request/Filters/V17.php @@ -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: diff --git a/src/Appwrite/Utopia/Request/Filters/V20.php b/src/Appwrite/Utopia/Request/Filters/V20.php index 324f5f67e5..72a8a27468 100644 --- a/src/Appwrite/Utopia/Request/Filters/V20.php +++ b/src/Appwrite/Utopia/Request/Filters/V20.php @@ -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 = []; diff --git a/src/Appwrite/Utopia/Request/Filters/V22.php b/src/Appwrite/Utopia/Request/Filters/V22.php new file mode 100644 index 0000000000..bf20b85d8e --- /dev/null +++ b/src/Appwrite/Utopia/Request/Filters/V22.php @@ -0,0 +1,93 @@ +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; + } +}