Skip to content

Commit 274a023

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

5 files changed

Lines changed: 116 additions & 47 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 & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
namespace Utopia\Usage\Adapter;
44

55
use Exception;
6-
use Utopia\Database\Query;
76
use Utopia\Fetch\Client;
87
use Utopia\Usage\Metric;
8+
use Utopia\Usage\Query;
99
use Utopia\Usage\Usage;
1010
use Utopia\Validator\Hostname;
1111

@@ -1072,18 +1072,8 @@ 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:
1086-
// SELECT allows selecting multiple columns/values
1075+
case Query::TYPE_IN:
1076+
// IN allows selecting multiple columns/values
10871077
$this->validateAttributeName($attribute);
10881078
$escapedAttr = $this->escapeIdentifier($attribute);
10891079
$inParams = [];
@@ -1330,8 +1320,8 @@ public function getBetweenDates(string $metric, string $startDate, string $endDa
13301320
{
13311321
$allQueries = [
13321322
Query::equal('metric', [$metric]),
1333-
Query::greaterThanEqual('time', $startDate),
1334-
Query::lessThanEqual('time', $endDate),
1323+
Query::greaterThan('time', $startDate),
1324+
Query::lessThan('time', $endDate),
13351325
];
13361326

13371327
// Add custom queries

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::equal($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/Usage.php

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ public function logBatch(array $metrics): bool
7777
/**
7878
* Get usage metrics by period.
7979
*
80-
* @param array<\Utopia\Database\Query> $queries
80+
* @param array<\Utopia\Usage\Query> $queries
8181
* @return array<Metric>
8282
*
8383
* @throws \Exception
@@ -90,7 +90,7 @@ public function getByPeriod(string $metric, string $period, array $queries = [])
9090
/**
9191
* Get usage metrics between dates.
9292
*
93-
* @param array<\Utopia\Database\Query> $queries
93+
* @param array<\Utopia\Usage\Query> $queries
9494
* @return array<Metric>
9595
*
9696
* @throws \Exception
@@ -103,7 +103,7 @@ public function getBetweenDates(string $metric, string $startDate, string $endDa
103103
/**
104104
* Count usage metrics by period.
105105
*
106-
* @param array<\Utopia\Database\Query> $queries
106+
* @param array<\Utopia\Usage\Query> $queries
107107
*
108108
* @throws \Exception
109109
*/
@@ -115,7 +115,7 @@ public function countByPeriod(string $metric, string $period, array $queries = [
115115
/**
116116
* Sum usage metric values by period.
117117
*
118-
* @param array<\Utopia\Database\Query> $queries
118+
* @param array<\Utopia\Usage\Query> $queries
119119
*
120120
* @throws \Exception
121121
*/
@@ -137,7 +137,7 @@ public function purge(string $datetime): bool
137137
/**
138138
* Find metrics using Query objects.
139139
*
140-
* @param array<\Utopia\Database\Query> $queries
140+
* @param array<\Utopia\Usage\Query> $queries
141141
* @return array<Metric>
142142
* @throws \Exception
143143
*/
@@ -149,7 +149,7 @@ public function find(array $queries = []): array
149149
/**
150150
* Count metrics using Query objects.
151151
*
152-
* @param array<\Utopia\Database\Query> $queries
152+
* @param array<\Utopia\Usage\Query> $queries
153153
* @return int
154154
* @throws \Exception
155155
*/

tests/Usage/UsageBase.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
namespace Utopia\Tests\Usage;
44

55
use Utopia\Database\DateTime;
6-
use Utopia\Database\Query;
6+
use Utopia\Usage\Query;
77
use Utopia\Usage\Usage;
88

99
trait UsageBase

0 commit comments

Comments
 (0)