Skip to content

Commit 82163a9

Browse files
committed
avoid stringifying fetches
1 parent bfbdc75 commit 82163a9

File tree

2 files changed

+20
-36
lines changed

2 files changed

+20
-36
lines changed

api.php

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1805,6 +1805,7 @@ private function getOptions(): array
18051805
$options = array(
18061806
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
18071807
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
1808+
\PDO::ATTR_STRINGIFY_FETCHES => false,
18081809
);
18091810
switch ($this->driver) {
18101811
case 'mysql':return $options + [
@@ -3476,47 +3477,29 @@ public function __construct(Router $router, Responder $responder, array $propert
34763477
$this->utils = new RequestUtils($reflection);
34773478
}
34783479

3479-
private function getMissingOrderParam(ReflectedTable $table): String
3480-
{
3481-
$pk = $table->getPk();
3482-
if (!$pk) {
3483-
$columnNames = $table->getColumnNames();
3484-
if (!$columnNames) {
3485-
return '';
3486-
}
3487-
return $columnNames[0];
3488-
}
3489-
return $pk->getName();
3490-
}
3491-
34923480
public function handle(Request $request): Response
34933481
{
34943482
$operation = $this->utils->getOperation($request);
34953483
if ($operation == 'list') {
3496-
$tableName = $request->getPathSegment(2);
3497-
$table = $this->reflection->getTable($tableName);
3498-
if ($table) {
3499-
$params = $request->getParams();
3500-
if (!isset($params['order']) || !$params['order']) {
3501-
$params['order'] = array($this->getMissingOrderParam($table));
3502-
}
3503-
$maxPage = (int) $this->getProperty('pages', '100');
3504-
if (isset($params['page']) && $params['page']) {
3505-
if (strpos($params['page'][0], ',') === false) {
3506-
$params['page'] = array(min($params['page'][0], $maxPage));
3507-
} else {
3508-
list($page, $size) = explode(',', $params['page'][0], 2);
3509-
$params['page'] = array(min($page, $maxPage) . ',' . $size);
3510-
}
3511-
}
3512-
$maxSize = (int) $this->getProperty('records', '1000');
3513-
if (!isset($params['size']) || !$params['size']) {
3514-
$params['size'] = array($maxSize);
3484+
$params = $request->getParams();
3485+
$maxPage = (int) $this->getProperty('pages', '100');
3486+
if (isset($params['page']) && $params['page'] && $maxPage > 0) {
3487+
if (strpos($params['page'][0], ',') === false) {
3488+
$page = $params['page'][0];
35153489
} else {
3516-
$params['size'] = array(min($params['size'][0], $maxSize));
3490+
list($page, $size) = explode(',', $params['page'][0], 2);
3491+
}
3492+
if ($page > $maxPage) {
3493+
return $this->responder->error(ErrorCode::PAGINATION_FORBIDDEN, '');
35173494
}
3518-
$request->setParams($params);
35193495
}
3496+
$maxSize = (int) $this->getProperty('records', '1000');
3497+
if (!isset($params['size']) || !$params['size'] && $maxSize > 0) {
3498+
$params['size'] = array($maxSize);
3499+
} else {
3500+
$params['size'] = array(min($params['size'][0], $maxSize));
3501+
}
3502+
$request->setParams($params);
35203503
}
35213504
return $this->next->handle($request);
35223505
}
@@ -4341,7 +4324,7 @@ class ErrorCode
43414324
const TEMPORARY_OR_PERMANENTLY_BLOCKED = 1016;
43424325
const BAD_OR_MISSING_XSRF_TOKEN = 1017;
43434326
const ONLY_AJAX_REQUESTS_ALLOWED = 1018;
4344-
const FILE_UPLOAD_FAILED = 1019;
4327+
const PAGINATION_FORBIDDEN = 1019;
43454328

43464329
private $values = [
43474330
9999 => ["%s", Response::INTERNAL_SERVER_ERROR],
@@ -4364,7 +4347,7 @@ class ErrorCode
43644347
1016 => ["Temporary or permanently blocked", Response::FORBIDDEN],
43654348
1017 => ["Bad or missing XSRF token", Response::FORBIDDEN],
43664349
1018 => ["Only AJAX requests allowed for '%s'", Response::FORBIDDEN],
4367-
1019 => ["File upload failed for '%s'", Response::UNPROCESSABLE_ENTITY],
4350+
1019 => ["Pagination forbidden", Response::FORBIDDEN],
43684351
];
43694352

43704353
public function __construct(int $code)

src/Tqdev/PhpCrudApi/Database/GenericDB.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ private function getOptions(): array
4747
$options = array(
4848
\PDO::ATTR_ERRMODE => \PDO::ERRMODE_EXCEPTION,
4949
\PDO::ATTR_DEFAULT_FETCH_MODE => \PDO::FETCH_ASSOC,
50+
\PDO::ATTR_STRINGIFY_FETCHES => false,
5051
);
5152
switch ($this->driver) {
5253
case 'mysql':return $options + [

0 commit comments

Comments
 (0)