Extrememly slow with some sql server

Ki - December 31, 2008 - 23:06
Project:Tax Tree Nodes
Version:5.x-1.1
Component:Code
Category:bug report
Priority:normal
Assigned:Unassigned
Status:active
Description

The tree view was very slow on one of my sites. Further investigation revealed that (mis)handling of $nodestoexclude in _taxtreenodes_taxonomy_tree() was the cause. At line 175-178 in taxtreenodes.module,

<?php
  $nodestoexclude
= variable_get('taxtreenodes_nodetypes_to_exclude', 0);
  if (
$nodestoexclude != 0) {
   
$nodestoexclude = "'" . implode ("','", $nodestoexclude) . "'";
  }
?>

If there are no nodes to exclude, then $nodestoexclude is set to empty array and it ends up being set to '', i.e, two single quotes. This has the side effect of evaluating $nodestoexclude as non numeric at line 355 and cause to build a sql statement, portion of which is [n.type not in ('')] at line 359.

This not-so-good but still valid sql statement runs fine on some systems without revealing this issue, but runs extrememely slow on others (probably with lesser resource mysql configuration).

One solution that I suggest which I am using is to set $nodestoexclude back to zero if empty array,

<?php
  $nodestoexclude
= variable_get('taxtreenodes_nodetypes_to_exclude', 0);
 
$nodestoexclude = empty($nodestoexclude) ? 0 : $nodestoexclude; // Inserted line for fix
 
if ($nodestoexclude != 0) {
   
$nodestoexclude = "'" . implode ("','", $nodestoexclude) . "'";
  }
?>

#1

attiks - March 10, 2009 - 09:18

Thanks for the info, I'll try to release a new version this week.

 
 

Drupal is a registered trademark of Dries Buytaert.