diff options
Diffstat (limited to 'library/Icingadb/Data/CsvResultSet.php')
-rw-r--r-- | library/Icingadb/Data/CsvResultSet.php | 79 |
1 files changed, 3 insertions, 76 deletions
diff --git a/library/Icingadb/Data/CsvResultSet.php b/library/Icingadb/Data/CsvResultSet.php index 746a7e4..d65364e 100644 --- a/library/Icingadb/Data/CsvResultSet.php +++ b/library/Icingadb/Data/CsvResultSet.php @@ -4,82 +4,9 @@ namespace Icinga\Module\Icingadb\Data; -use DateTime; -use DateTimeZone; -use Icinga\Module\Icingadb\Redis\VolatileStateResults; -use ipl\Orm\Model; -use ipl\Orm\Query; +use ipl\Orm\ResultSet; -class CsvResultSet extends VolatileStateResults +class CsvResultSet extends ResultSet { - protected $isCacheDisabled = true; - - /** - * @return array<string, ?string> - */ - public function current(): array - { - return $this->extractKeysAndValues(parent::current()); - } - - protected function formatValue(string $key, $value): ?string - { - if ( - $value - && ( - $key === 'id' - || substr($key, -3) === '_id' - || substr($key, -3) === '.id' - || substr($key, -9) === '_checksum' - || substr($key, -4) === '_bin' - ) - ) { - $value = bin2hex($value); - } - - if (is_bool($value)) { - return $value ? 'true' : 'false'; - } elseif (is_string($value)) { - return '"' . str_replace('"', '""', $value) . '"'; - } elseif (is_array($value)) { - return '"' . implode(',', $value) . '"'; - } elseif ($value instanceof DateTime) { - return $value->setTimezone(new DateTimeZone('UTC')) - ->format('Y-m-d\TH:i:s.vP'); - } else { - return $value; - } - } - - protected function extractKeysAndValues(Model $model, string $path = ''): array - { - $keysAndValues = []; - foreach ($model as $key => $value) { - $keyPath = ($path ? $path . '.' : '') . $key; - if ($value instanceof Model) { - $keysAndValues += $this->extractKeysAndValues($value, $keyPath); - } else { - $keysAndValues[$keyPath] = $this->formatValue($key, $value); - } - } - - return $keysAndValues; - } - - public static function stream(Query $query): void - { - $query->setResultSetClass(__CLASS__); - - foreach ($query as $i => $keysAndValues) { - if ($i === 0) { - echo implode(',', array_keys($keysAndValues)); - } - - echo "\r\n"; - - echo implode(',', array_values($keysAndValues)); - } - - exit; - } + use CsvResultSetUtils; } |