Skip to content

Commit fb94035

Browse files
committed
fix(category): SQL statement cause MariaDB crash
seems caused by GROUP BY statement in a sub-sub-query using the same table (joined) as the outer query. Crash seen with MariaDB 10.11 and (not sure) some MariaDB 10.6 instances
1 parent f30c28e commit fb94035

File tree

1 file changed

+4
-10
lines changed

1 file changed

+4
-10
lines changed

inc/category.class.php

+4-10
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,6 @@ public static function getCategoryTree(): array {
9191

9292
$cat_table = PluginFormcreatorCategory::getTable();
9393
$form_table = PluginFormcreatorForm::getTable();
94-
$table_fp = PluginFormcreatorForm_Profile::getTable();
9594

9695
if (version_compare(GLPI_VERSION, '10.0.6') > 0) {
9796
$knowbase_category = KnowbaseItemCategory::SEEALL;
@@ -104,9 +103,7 @@ public static function getCategoryTree(): array {
104103
'contains' => '',
105104
'knowbaseitemcategories_id' => $knowbase_category,
106105
]);
107-
// GLPI 9.5 returns an array
108-
$subQuery = new DBMysqlIterator($DB);
109-
$subQuery->buildQuery($query_faqs);
106+
$query_faqs['SELECT'] = [$query_faqs['FROM'] . '.' . 'id'];
110107

111108
$dbUtils = new DbUtils();
112109
$entityRestrict = $dbUtils->getEntitiesRestrictCriteria($form_table, "", "", true, false);
@@ -120,18 +117,15 @@ public static function getCategoryTree(): array {
120117
// Get base query, add count and category condition
121118
$count_forms_criteria = PluginFormcreatorForm::getFormListQuery();
122119
$count_forms_criteria['COUNT'] = 'count';
123-
$count_forms_criteria['WHERE']["$form_table.$categoryFk"] = new QueryExpression("$cat_table.id");
120+
$count_forms_criteria['WHERE']["`$form_table`.`$categoryFk`"] = new QueryExpression("`$cat_table`.`id`");
124121

125122
$count1 = new QuerySubQuery($count_forms_criteria);
126123
$count2 = new QuerySubQuery([
127124
'COUNT' => 'count',
128125
'FROM' => 'glpi_knowbaseitems_knowbaseitemcategories',
129126
'WHERE' => [
130-
'knowbaseitems_id' => new QuerySubQuery([
131-
'SELECT' => 'faqs.id',
132-
'FROM' => (new QuerySubQuery($query_faqs, 'faqs'))
133-
]),
134-
[(new QueryExpression("knowbaseitemcategories_id = $cat_table.knowbaseitemcategories_id"))],
127+
'knowbaseitems_id' => new QuerySubQuery($query_faqs),
128+
[(new QueryExpression("`glpi_knowbaseitems_knowbaseitemcategories`.`knowbaseitemcategories_id` = `$cat_table`.`knowbaseitemcategories_id`"))],
135129
]
136130
]);
137131
$request = [

0 commit comments

Comments
 (0)