From ba1f9cb26c360ed082e5604f22a7b27b51a74ef6 Mon Sep 17 00:00:00 2001 From: Paul Holden Date: Mon, 18 Mar 2024 16:34:59 +0000 Subject: [PATCH] MDL-81073 badges: better Oracle support for expiry filter. Avoid the following error by casting the bound parameter: ORA-00932: inconsistent datatypes: expected CHAR got NUMBER. --- badges/classes/reportbuilder/local/entities/badge.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/badges/classes/reportbuilder/local/entities/badge.php b/badges/classes/reportbuilder/local/entities/badge.php index b795d660c74..f1b9aa7c7f4 100644 --- a/badges/classes/reportbuilder/local/entities/badge.php +++ b/badges/classes/reportbuilder/local/entities/badge.php @@ -284,6 +284,8 @@ class badge extends base { * @return filter[] */ protected function get_all_filters(): array { + global $DB; + $badgealias = $this->get_table_alias('badge'); // Name. @@ -330,9 +332,9 @@ class badge extends base { 'expiry', new lang_string('expirydate', 'core_badges'), $this->get_entity_name(), - "CASE - WHEN {$badgealias}.expiredate IS NULL AND {$badgealias}.expireperiod IS NULL THEN :{$parammaxint} - ELSE COALESCE({$badgealias}.expiredate, {$badgealias}.expireperiod + :{$paramtime}) + "CASE WHEN {$badgealias}.expiredate IS NULL AND {$badgealias}.expireperiod IS NULL + THEN " . $DB->sql_cast_char2int(":{$parammaxint}") . " + ELSE COALESCE({$badgealias}.expiredate, {$badgealias}.expireperiod + :{$paramtime}) END", [$parammaxint => 2147483647, $paramtime => time()] )) -- 2.43.0