OAI ERROR - OJS 3.4.0.4 + PosgreSQL

Hi,

We recently updated our OJS to version 3.4.0.4.
Now we have a problem with the OAI:
https://www.revistas.usp.br/index/oai?verb=ListRecords&metadataPrefix=oai_dc&from=2024-01-29T06:00:13Z&until=2024-03-14T12:29:00Z

ERROR 500

OJS logs:

[Thu Mar 14 10:08:14.966047 2024] [php:error] [pid 79917] [client 200.144.210.111:52784] PHP Fatal error: Uncaught PDOException: SQLSTATE[22008]: Datetime field overflow: 7 ERROR: date/time field value out of range: “1706508013”\nHINT: Perhaps you need a different “datestyle” setting.\nCONTEXT: unnamed portal parameter $6 = ‘…’ in /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php:419\nStack trace:\n#0 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(419): PDOStatement->execute()\n#1 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(753): Illuminate\Database\Connection->Illuminate\Database\{closure}()\n#2 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(720): Illuminate\Database\Connection->runQueryCallback()\n#3 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(405): Illuminate\Database\Connection->run()\n#4 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2705): Illuminate\Database\Connection->select()\n#5 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2694): Illuminate\Database\Query\Builder->runSelect()\n#6 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3230): Illuminate\Database\Query\Builder->Illuminate\Database\Query\{closure}()\n#7 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2693): Illuminate\Database\Query\Builder->onceWithColumns()\n#8 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3157): Illuminate\Database\Query\Builder->get()\n#9 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3085): Illuminate\Database\Query\Builder->aggregate()\n#10 /var/www/revistas/lib/pkp/classes/oai/PKPOAIDAO.php(148): Illuminate\Database\Query\Builder->count()\n#11 /var/www/revistas/classes/oai/ojs/JournalOAI.php(195): PKP\oai\PKPOAIDAO->getRecords()\n#12 /var/www/revistas/lib/pkp/classes/oai/OAI.php(542): APP\oai\ojs\JournalOAI->records()\n#13 /var/www/revistas/lib/pkp/classes/oai/OAI.php(95): PKP\oai\OAI->ListRecords()\n#14 /var/www/revistas/pages/oai/OAIHandler.php(47): PKP\oai\OAI->execute()\n#15 [internal function]: APP\pages\oai\OAIHandler->index()\n#16 /var/www/revistas/lib/pkp/classes/core/PKPRouter.php(334): call_user_func()\n#17 /var/www/revistas/lib/pkp/classes/core/PKPPageRouter.php(277): PKP\core\PKPRouter->_authorizeInitializeAndCallRequest()\n#18 /var/www/revistas/lib/pkp/classes/core/Dispatcher.php(165): PKP\core\PKPPageRouter->route()\n#19 /var/www/revistas/lib/pkp/classes/core/PKPApplication.php(388): PKP\core\Dispatcher->dispatch()\n#20 /var/www/revistas/index.php(21): PKP\core\PKPApplication->execute()\n#21 {main}\n\nNext Illuminate\Database\QueryException: SQLSTATE[22008]: Datetime field overflow: 7 ERROR: date/time field value out of range: “1706508013”\nHINT: Perhaps you need a different “datestyle” setting.\nCONTEXT: unnamed portal parameter $6 = ‘…’ (SQL: select count(*) as aggregate from ((select GREATEST(a.last_modified, i.last_modified, p.last_modified) AS last_modified, “a”.“submission_id” as “submission_id”, “i”.“issue_id”, NULL AS tombstone_id, NULL AS set_spec, NULL AS oai_identifier, “j”.“journal_id” as “journal_id”, “s”.“section_id” as “section_id” from “submissions” as “a” inner join “publications” as “p” on “a”.“current_publication_id” = “p”.“publication_id” inner join “publication_settings” as “psissue” on “psissue”.“publication_id” = “p”.“publication_id” and “psissue”.“setting_name” = ‘issueId’ and “psissue”.“locale” = ‘’ inner join “issues” as “i” on CAST(i.issue_id AS CHAR(20)) = “psissue”.“setting_value” inner join “sections” as “s” on “s”.“section_id” = “p”.“section_id” inner join “journals” as “j” on “j”.“journal_id” = “a”.“context_id” where “i”.“published” = 1 and “j”.“enabled” = 1 and “a”.“status” = 3 and GREATEST(a.last_modified, i.last_modified, p.last_modified)::date >= 2024-01-29 and GREATEST(a.last_modified, i.last_modified, p.last_modified)::date <= 2024-03-14) union (select “dot”.“date_deleted” as “last_modified”, “dot”.“data_object_id” as “submission_id”, NULL AS issue_id, “dot”.“tombstone_id”, “dot”.“set_spec”, “dot”.“oai_identifier”, NULL AS assoc_id, NULL AS assoc_id from “data_object_tombstones” as “dot” where “dot”.“date_deleted” >= 1706508013 and “dot”.“date_deleted” <= 1710419340) order by journal_id, submission_id asc) as “temp_table”) in /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php:760\nStack trace:\n#0 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(720): Illuminate\Database\Connection->runQueryCallback()\n#1 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php(405): Illuminate\Database\Connection->run()\n#2 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2705): Illuminate\Database\Connection->select()\n#3 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2694): Illuminate\Database\Query\Builder->runSelect()\n#4 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3230): Illuminate\Database\Query\Builder->Illuminate\Database\Query\{closure}()\n#5 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(2693): Illuminate\Database\Query\Builder->onceWithColumns()\n#6 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3157): Illuminate\Database\Query\Builder->get()\n#7 /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Query/Builder.php(3085): Illuminate\Database\Query\Builder->aggregate()\n#8 /var/www/revistas/lib/pkp/classes/oai/PKPOAIDAO.php(148): Illuminate\Database\Query\Builder->count()\n#9 /var/www/revistas/classes/oai/ojs/JournalOAI.php(195): PKP\oai\PKPOAIDAO->getRecords()\n#10 /var/www/revistas/lib/pkp/classes/oai/OAI.php(542): APP\oai\ojs\JournalOAI->records()\n#11 /var/www/revistas/lib/pkp/classes/oai/OAI.php(95): PKP\oai\OAI->ListRecords()\n#12 /var/www/revistas/pages/oai/OAIHandler.php(47): PKP\oai\OAI->execute()\n#13 [internal function]: APP\pages\oai\OAIHandler->index()\n#14 /var/www/revistas/lib/pkp/classes/core/PKPRouter.php(334): call_user_func()\n#15 /var/www/revistas/lib/pkp/classes/core/PKPPageRouter.php(277): PKP\core\PKPRouter->_authorizeInitializeAndCallRequest()\n#16 /var/www/revistas/lib/pkp/classes/core/Dispatcher.php(165): PKP\core\PKPPageRouter->route()\n#17 /var/www/revistas/lib/pkp/classes/core/PKPApplication.php(388): PKP\core\Dispatcher->dispatch()\n#18 /var/www/revistas/index.php(21): PKP\core\PKPApplication->execute()\n#19 {main}\n thrown in /var/www/revistas/lib/pkp/lib/vendor/laravel/framework/src/Illuminate/Database/Connection.php on line 760

PostgreSQL log:

6329 2024-03-14 10:11:54 -03 [1900546]: [1-1] user=revistas,db=revistas ERROR: date/time field va lue out of range: “1709251200”
6330 2024-03-14 10:11:54 -03 [1900546]: [2-1] user=revistas,db=revistas HINT: Perhaps you need a different “datestyle” setting.
6331 2024-03-14 10:11:54 -03 [1900546]: [3-1] user=revistas,db=revistas CONTEXT: unnamed portal p arameter $9 = ‘…’
6332 2024-03-14 10:11:54 -03 [1900546]: [4-1] user=revistas,db=revistas STATEMENT: select count(* ) as aggregate from ((select GREATEST(a.last_modified, i.last_modified, p.last_modified) AS l ast_modified, “a”.“submission_id” as “submission_id”, “i”.“issue_id”, NULL AS tombstone_id, N ULL AS set_spec, NULL AS oai_identifier, “j”.“journal_id” as “journal_id”, “s”.“section_id” a s “section_id” from “submissions” as “a” inner join “publications” as “p” on “a”.“current_pub lication_id” = “p”.“publication_id” inner join “publication_settings” as “psissue” on “psissu e”.“publication_id” = “p”.“publication_id” and “psissue”.“setting_name” = ‘issueId’ and “psis sue”.“locale” = ‘’ inner join “issues” as “i” on CAST(i.issue_id AS CHAR(20)) = “psissue”.“se tting_value” inner join “sections” as “s” on “s”.“section_id” = “p”.“section_id” inner join " journals" as “j” on “j”.“journal_id” = “a”.“context_id” where “i”.“published” = $1 and “j”.“e nabled” = $2 and “a”.“status” = $3 and “j”.“journal_id” = $4 and GREATEST(a.last_modified, i. last_modified, p.last_modified)::date >= $5 and GREATEST(a.last_modified, i.last_modified, p. last_modified)::date <= $6) union (select “dot”.“date_deleted” as “last_modified”, “dot”.“dat a_object_id” as “submission_id”, NULL AS issue_id, “dot”.“tombstone_id”, “dot”.“set_spec”, “d ot”.“oai_identifier”, “tsoj”.“assoc_id”, NULL AS assoc_id from “data_object_tombstones” as “d ot” inner join “data_object_tombstone_oai_set_objects” as “tsoj” on “tsoj”.“tombstone_id” = " dot".“tombstone_id” and “tsoj”.“assoc_type” = $7 and “tsoj”.“assoc_id” = $8 where “dot”.“date _deleted” >= $9 and “dot”.“date_deleted” <= $10) order by journal_id, submission_id asc) as " temp_table"

Any help please?

Regards,
Tarcisio Pereira

1 Like

Hi,

I modified de file classes/oai/ojs/OAIDAO.php:

243 public function _getRecordsRecordSetQuery($setIds, $from, $until, $set, $submissionId = nu ll, $orderBy = ‘journal_id, submission_id’)
244 {
245 $from = \DateTime::createFromFormat(‘U’, $from);
246 $until = \DateTime::createFromFormat(‘U’, $until);
247 $journalId = array_shift($setIds);
248 $sectionId = array_shift($setIds);

and

294 ->when($from, function ($query, $from) {
295 return $query->whereDate(DB::raw(‘GREATEST(a.last_modified, i.last_modified, p .last_modified)’), ‘>=’, $from);
296 })
297 ->when($until, function ($query, $until) {
298 return $query->whereDate(DB::raw(‘GREATEST(a.last_modified, i.last_modified, p .last_modified)’), ‘<=’, $until);
299 })

It appears to be working.

Regards,
Tarcisio Pereira

Hi @Tarcisio_Pereira,

If you think this is a general fix that should be considered for the next release, would you be willing to open a pull request against the github repo?

That way we can get it code reviewed and merged.

Thanks,
Alec Smecher
Public Knowledge Project Team

1 Like

Hi @asmecher

Thank you.

This topic was automatically closed after 14 days. New replies are no longer allowed.