mirror of
https://code.mensbeam.com/MensBeam/Arsse.git
synced 2024-12-23 07:44:53 +00:00
42a5ccb96c
Queries for multiple specific articles are limited in size because of limits on the number of bound query parameters. Currently this limit is somewhat arbitrarily set at 50, but it may increase. Historically controllers would be responsible for chunking input, but this will present problems when the expected output is a result set, and of course the maintenance burden increases as the number of controllers increases. This commit transfers the burden to the data model, and consequently introduces a ResultAggregate class which collects chunked result sets (currently only for articleList). In the course of making these changes the mock Result class was also largely rewritten, fixing many bugs with it. This commit does not modify the controllers nor their tests; this will be done in a subsequent commit.
57 lines
1.1 KiB
PHP
57 lines
1.1 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
namespace JKingWeb\Arsse\Db;
|
|
|
|
abstract class AbstractResult implements Result {
|
|
protected $pos = 0;
|
|
protected $cur = null;
|
|
|
|
// actual public methods
|
|
|
|
public function getValue() {
|
|
if ($this->valid()) {
|
|
$out = array_shift($this->cur);
|
|
$this->next();
|
|
return $out;
|
|
}
|
|
$this->next();
|
|
return null;
|
|
}
|
|
|
|
public function getRow() {
|
|
$out = ($this->valid() ? $this->cur : null);
|
|
$this->next();
|
|
return $out;
|
|
}
|
|
|
|
public function getAll(): array {
|
|
return iterator_to_array($this, false);
|
|
}
|
|
|
|
abstract public function changes();
|
|
|
|
abstract public function lastId();
|
|
|
|
// PHP iterator methods
|
|
|
|
abstract public function valid();
|
|
|
|
public function next() {
|
|
$this->cur = null;
|
|
$this->pos += 1;
|
|
}
|
|
|
|
public function current() {
|
|
return $this->cur;
|
|
}
|
|
|
|
public function key() {
|
|
return $this->pos;
|
|
}
|
|
|
|
public function rewind() {
|
|
if ($this->pos) {
|
|
throw new Exception("resultReused");
|
|
}
|
|
}
|
|
}
|