Skip to content

Commit 1689ed9

Browse files
committed
fix: Update usage of Query class in Adapter and Usage files
1 parent 3661fd1 commit 1689ed9

6 files changed

Lines changed: 121 additions & 61 deletions

File tree

src/Usage/Adapter.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,30 +31,30 @@ abstract public function logBatch(array $metrics): bool;
3131
/**
3232
* Get usage metrics by period
3333
*
34-
* @param array<\Utopia\Database\Query> $queries
34+
* @param array<\Utopia\Usage\Query> $queries
3535
* @return array<Metric>
3636
*/
3737
abstract public function getByPeriod(string $metric, string $period, array $queries = []): array;
3838

3939
/**
4040
* Get usage metrics between dates
4141
*
42-
* @param array<\Utopia\Database\Query> $queries
42+
* @param array<\Utopia\Usage\Query> $queries
4343
* @return array<Metric>
4444
*/
4545
abstract public function getBetweenDates(string $metric, string $startDate, string $endDate, array $queries = []): array;
4646

4747
/**
4848
* Count usage metrics by period
4949
*
50-
* @param array<\Utopia\Database\Query> $queries
50+
* @param array<\Utopia\Usage\Query> $queries
5151
*/
5252
abstract public function countByPeriod(string $metric, string $period, array $queries = []): int;
5353

5454
/**
5555
* Sum usage metrics by period
5656
*
57-
* @param array<\Utopia\Database\Query> $queries
57+
* @param array<\Utopia\Usage\Query> $queries
5858
*/
5959
abstract public function sumByPeriod(string $metric, string $period, array $queries = []): int;
6060

@@ -66,15 +66,15 @@ abstract public function purge(string $datetime): bool;
6666
/**
6767
* Find metrics using Query objects.
6868
*
69-
* @param array<\Utopia\Database\Query> $queries
69+
* @param array<\Utopia\Usage\Query> $queries
7070
* @return array<Metric>
7171
*/
7272
abstract public function find(array $queries = []): array;
7373

7474
/**
7575
* Count metrics using Query objects.
7676
*
77-
* @param array<\Utopia\Database\Query> $queries
77+
* @param array<\Utopia\Usage\Query> $queries
7878
* @return int
7979
*/
8080
abstract public function count(array $queries = []): int;

src/Usage/Adapter/ClickHouse.php

Lines changed: 5 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Utopia\Usage\Adapter;
44

55
use Exception;
6-
use Utopia\Database\Query;
6+
use Utopia\Usage\Query;
77
use Utopia\Fetch\Client;
88
use Utopia\Usage\Metric;
99
use Utopia\Usage\Usage;
@@ -1072,17 +1072,7 @@ private function parseQueries(array $queries): array
10721072
}
10731073
break;
10741074

1075-
case Query::TYPE_SEARCH:
1076-
// SEARCH is like LIKE
1077-
$this->validateAttributeName($attribute);
1078-
$escapedAttr = $this->escapeIdentifier($attribute);
1079-
$paramName = 'param_' . $paramCounter++;
1080-
$value = is_array($values) && !empty($values) ? $values[0] : $values;
1081-
$filters[] = "{$escapedAttr} LIKE {{$paramName}:String}";
1082-
$params[$paramName] = $this->formatParamValue($value);
1083-
break;
1084-
1085-
case Query::TYPE_SELECT:
1075+
case Query::TYPE_IN:
10861076
// SELECT allows selecting multiple columns/values
10871077
$this->validateAttributeName($attribute);
10881078
$escapedAttr = $this->escapeIdentifier($attribute);
@@ -1098,20 +1088,12 @@ private function parseQueries(array $queries): array
10981088
break;
10991089

11001090
case Query::TYPE_ORDER_DESC:
1101-
// Skip special Query attributes (like $sequence) that aren't real columns
1102-
if (str_starts_with($attribute, '$')) {
1103-
break;
1104-
}
11051091
$this->validateAttributeName($attribute);
11061092
$escapedAttr = $this->escapeIdentifier($attribute);
11071093
$orderBy[] = "{$escapedAttr} DESC";
11081094
break;
11091095

11101096
case Query::TYPE_ORDER_ASC:
1111-
// Skip special Query attributes (like $sequence) that aren't real columns
1112-
if (str_starts_with($attribute, '$')) {
1113-
break;
1114-
}
11151097
$this->validateAttributeName($attribute);
11161098
$escapedAttr = $this->escapeIdentifier($attribute);
11171099
$orderBy[] = "{$escapedAttr} ASC";
@@ -1313,7 +1295,7 @@ public function getByPeriod(string $metric, string $period, array $queries = [])
13131295
}
13141296

13151297
// Add default ordering
1316-
$allQueries[] = Query::orderDesc();
1298+
$allQueries[] = Query::orderDesc('time');
13171299

13181300
return $this->find($allQueries);
13191301
}
@@ -1330,8 +1312,7 @@ public function getBetweenDates(string $metric, string $startDate, string $endDa
13301312
{
13311313
$allQueries = [
13321314
Query::equal('metric', [$metric]),
1333-
Query::greaterThanEqual('time', $startDate),
1334-
Query::lessThanEqual('time', $endDate),
1315+
Query::between('time', $startDate, $endDate)
13351316
];
13361317

13371318
// Add custom queries
@@ -1340,7 +1321,7 @@ public function getBetweenDates(string $metric, string $startDate, string $endDa
13401321
}
13411322

13421323
// Add default ordering
1343-
$allQueries[] = Query::orderDesc();
1324+
$allQueries[] = Query::orderDesc('time');
13441325

13451326
return $this->find($allQueries);
13461327
}

src/Usage/Adapter/Database.php

Lines changed: 98 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,10 @@
55
use Utopia\Database\Database as UtopiaDatabase;
66
use Utopia\Database\Document;
77
use Utopia\Database\Exception\Duplicate as DuplicateException;
8-
use Utopia\Database\Query;
8+
use Utopia\Database\Query as DatabaseQuery;
99
use Utopia\Exception;
1010
use Utopia\Usage\Metric;
11+
use Utopia\Usage\Query;
1112
use Utopia\Usage\Usage;
1213

1314
class Database extends SQL
@@ -138,17 +139,92 @@ public function logBatch(array $metrics): bool
138139
return true;
139140
}
140141

142+
/**
143+
* Convert Utopia\Usage\Query to Utopia\Database\Query for use with the Database class.
144+
*
145+
* @param array<Query> $queries
146+
* @return array<DatabaseQuery>
147+
*/
148+
private function convertQueriesToDatabase(array $queries): array
149+
{
150+
$dbQueries = [];
151+
foreach ($queries as $query) {
152+
$method = $query->getMethod();
153+
$attribute = $query->getAttribute();
154+
$values = $query->getValues();
155+
156+
switch ($method) {
157+
case Query::TYPE_EQUAL:
158+
/** @var array<array<int|string, mixed>|bool|float|int|string> $values */
159+
$dbQueries[] = DatabaseQuery::equal($attribute, $values);
160+
break;
161+
case Query::TYPE_GREATER:
162+
if (!empty($values)) {
163+
/** @var bool|float|int|string $value */
164+
$value = $values[0];
165+
$dbQueries[] = DatabaseQuery::greaterThan($attribute, $value);
166+
}
167+
break;
168+
case Query::TYPE_LESSER:
169+
if (!empty($values)) {
170+
/** @var bool|float|int|string $value */
171+
$value = $values[0];
172+
$dbQueries[] = DatabaseQuery::lessThan($attribute, $value);
173+
}
174+
break;
175+
case Query::TYPE_BETWEEN:
176+
if (count($values) >= 2) {
177+
/** @var bool|float|int|string $start */
178+
$start = $values[0];
179+
/** @var bool|float|int|string $end */
180+
$end = $values[1];
181+
$dbQueries[] = DatabaseQuery::between($attribute, $start, $end);
182+
}
183+
break;
184+
case Query::TYPE_IN:
185+
// For IN queries, the values are the items to match
186+
// Create using equal with array values for compatibility
187+
/** @var array<array<int|string, mixed>|bool|float|int|string> $values */
188+
$dbQueries[] = DatabaseQuery::contains($attribute, $values);
189+
break;
190+
case Query::TYPE_ORDER_DESC:
191+
$dbQueries[] = DatabaseQuery::orderDesc($attribute);
192+
break;
193+
case Query::TYPE_ORDER_ASC:
194+
$dbQueries[] = DatabaseQuery::orderAsc($attribute);
195+
break;
196+
case Query::TYPE_LIMIT:
197+
if (!empty($values)) {
198+
/** @var int|string $val */
199+
$val = $values[0] ?? 0;
200+
$dbQueries[] = DatabaseQuery::limit((int) $val);
201+
}
202+
break;
203+
case Query::TYPE_OFFSET:
204+
if (!empty($values)) {
205+
/** @var int|string $val */
206+
$val = $values[0] ?? 0;
207+
$dbQueries[] = DatabaseQuery::offset((int) $val);
208+
}
209+
break;
210+
}
211+
}
212+
213+
return $dbQueries;
214+
}
215+
141216
public function getByPeriod(string $metric, string $period, array $queries = []): array
142217
{
143218
/** @var array<Document> $result */
144219
$result = $this->db->getAuthorization()->skip(function () use ($queries, $metric, $period) {
145-
$queries[] = Query::equal('metric', [$metric]);
146-
$queries[] = Query::equal('period', [$period]);
147-
$queries[] = Query::orderDesc();
220+
$dbQueries = $this->convertQueriesToDatabase($queries);
221+
$dbQueries[] = DatabaseQuery::equal('metric', [$metric]);
222+
$dbQueries[] = DatabaseQuery::equal('period', [$period]);
223+
$dbQueries[] = DatabaseQuery::orderDesc();
148224

149225
return $this->db->find(
150226
collection: $this->collection,
151-
queries: $queries,
227+
queries: $dbQueries,
152228
);
153229
});
154230

@@ -159,14 +235,15 @@ public function getBetweenDates(string $metric, string $startDate, string $endDa
159235
{
160236
/** @var array<Document> $result */
161237
$result = $this->db->getAuthorization()->skip(function () use ($queries, $metric, $startDate, $endDate) {
162-
$queries[] = Query::equal('metric', [$metric]);
163-
$queries[] = Query::greaterThanEqual('time', $startDate);
164-
$queries[] = Query::lessThanEqual('time', $endDate);
165-
$queries[] = Query::orderDesc();
238+
$dbQueries = $this->convertQueriesToDatabase($queries);
239+
$dbQueries[] = DatabaseQuery::equal('metric', [$metric]);
240+
$dbQueries[] = DatabaseQuery::greaterThanEqual('time', $startDate);
241+
$dbQueries[] = DatabaseQuery::lessThanEqual('time', $endDate);
242+
$dbQueries[] = DatabaseQuery::orderDesc();
166243

167244
return $this->db->find(
168245
collection: $this->collection,
169-
queries: $queries,
246+
queries: $dbQueries,
170247
);
171248
});
172249

@@ -177,13 +254,13 @@ public function countByPeriod(string $metric, string $period, array $queries = [
177254
{
178255
/** @var int $count */
179256
$count = $this->db->getAuthorization()->skip(function () use ($queries, $metric, $period) {
257+
$dbQueries = $this->convertQueriesToDatabase($queries);
258+
$dbQueries[] = DatabaseQuery::equal('metric', [$metric]);
259+
$dbQueries[] = DatabaseQuery::equal('period', [$period]);
260+
180261
return $this->db->count(
181262
collection: $this->collection,
182-
queries: [
183-
Query::equal('metric', [$metric]),
184-
Query::equal('period', [$period]),
185-
...$queries,
186-
]
263+
queries: $dbQueries
187264
);
188265
});
189266

@@ -210,8 +287,8 @@ public function purge(string $datetime): bool
210287
$documents = $this->db->find(
211288
collection: $this->collection,
212289
queries: [
213-
Query::lessThan('time', $datetime),
214-
Query::limit(100),
290+
DatabaseQuery::lessThan('time', $datetime),
291+
DatabaseQuery::limit(100),
215292
]
216293
);
217294

@@ -234,9 +311,10 @@ public function find(array $queries = []): array
234311
{
235312
/** @var array<Document> $result */
236313
$result = $this->db->getAuthorization()->skip(function () use ($queries) {
314+
$dbQueries = $this->convertQueriesToDatabase($queries);
237315
return $this->db->find(
238316
collection: $this->collection,
239-
queries: $queries,
317+
queries: $dbQueries,
240318
);
241319
});
242320

@@ -253,9 +331,10 @@ public function count(array $queries = []): int
253331
{
254332
/** @var int $count */
255333
$count = $this->db->getAuthorization()->skip(function () use ($queries) {
334+
$dbQueries = $this->convertQueriesToDatabase($queries);
256335
return $this->db->count(
257336
collection: $this->collection,
258-
queries: $queries
337+
queries: $dbQueries
259338
);
260339
});
261340

src/Usage/Query.php

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,12 @@ public function getValue(mixed $default = null): mixed
8484
* Filter by equal condition
8585
*
8686
* @param string $attribute
87-
* @param mixed $value
87+
* @param array $value
8888
* @return self
8989
*/
90-
public static function equal(string $attribute, mixed $value): self
90+
public static function equal(string $attribute, array $value): self
9191
{
92-
return new self(self::TYPE_EQUAL, $attribute, [$value]);
92+
return new self(self::TYPE_EQUAL, $attribute, $value);
9393
}
9494

9595
/**
@@ -147,7 +147,7 @@ public static function in(string $attribute, array $values): self
147147
* @param string $attribute
148148
* @return self
149149
*/
150-
public static function orderDesc(string $attribute = 'time'): self
150+
public static function orderDesc(string $attribute): self
151151
{
152152
return new self(self::TYPE_ORDER_DESC, $attribute);
153153
}
@@ -158,7 +158,7 @@ public static function orderDesc(string $attribute = 'time'): self
158158
* @param string $attribute
159159
* @return self
160160
*/
161-
public static function orderAsc(string $attribute = 'time'): self
161+
public static function orderAsc(string $attribute): self
162162
{
163163
return new self(self::TYPE_ORDER_ASC, $attribute);
164164
}

0 commit comments

Comments
 (0)