From e6d6a53a09e37a1625b366df7eee00b7d932ed9c Mon Sep 17 00:00:00 2001 From: ZdenekSrotyr Date: Fri, 8 Aug 2025 15:55:18 +0200 Subject: [PATCH 1/2] Add logging and skipping for non-array rows in PgSQLResultWriter --- src/Extractor/PgSQLResultWriter.php | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/Extractor/PgSQLResultWriter.php b/src/Extractor/PgSQLResultWriter.php index 331637a..3bb6f97 100644 --- a/src/Extractor/PgSQLResultWriter.php +++ b/src/Extractor/PgSQLResultWriter.php @@ -28,6 +28,20 @@ public function writeToCsv(QueryResult $result, ExportConfig $exportConfig, stri protected function writeRow(array $row, CsvWriter $csvWriter): void { + // Skip and log if an unexpected non-array value is propagated as a row + if (!is_array($row)) { + $message = sprintf( + 'PgSQLResultWriter: skipping non-array row (type: %s).', + gettype($row), + ); + if (property_exists($this, 'logger') && $this->logger instanceof \Psr\Log\LoggerInterface) { + $this->logger->warning($message); + } else { + error_log($message); + } + return; + } + if ($this->replaceBooleans) { array_walk($row, function (&$item): void { if (is_bool($item)) { From a8b76cb87d44573278ecd18de5100f3195d6d198 Mon Sep 17 00:00:00 2001 From: ZdenekSrotyr Date: Fri, 8 Aug 2025 16:03:26 +0200 Subject: [PATCH 2/2] Refactor logger type hint in PgSQLResultWriter --- src/Extractor/PgSQLResultWriter.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Extractor/PgSQLResultWriter.php b/src/Extractor/PgSQLResultWriter.php index 3bb6f97..f9b0220 100644 --- a/src/Extractor/PgSQLResultWriter.php +++ b/src/Extractor/PgSQLResultWriter.php @@ -11,6 +11,7 @@ use Keboola\DbExtractor\Configuration\PgsqlExportConfig; use Keboola\DbExtractor\Exception\InvalidArgumentException; use Keboola\DbExtractorConfig\Configuration\ValueObject\ExportConfig; +use Psr\Log\LoggerInterface; class PgSQLResultWriter extends DefaultResultWriter { @@ -34,7 +35,7 @@ protected function writeRow(array $row, CsvWriter $csvWriter): void 'PgSQLResultWriter: skipping non-array row (type: %s).', gettype($row), ); - if (property_exists($this, 'logger') && $this->logger instanceof \Psr\Log\LoggerInterface) { + if (property_exists($this, 'logger') && $this->logger instanceof LoggerInterface) { $this->logger->warning($message); } else { error_log($message);