private function equalRecurse(ClauseGroup $g1, ClauseGroup $g2, $level)
 {
     if ($g1->getType() != $g2->getType() || $g1->getCount() != $g2->getCount()) {
         return false;
     }
     $subClauses1 = $g1->getSubclauses();
     $subClauses2 = $g2->getSubclauses();
     $ok = true;
     for ($i = 0; $i < count($subClauses1); $i++) {
         $item1 = $subClauses1[$i];
         $item2 = $subClauses2[$i];
         if ($item1 instanceof ClauseGroup) {
             $ok = $this->equalRecurse($item1, $item2, $level + 1);
         } else {
             $ok = $item1 == $item2;
         }
         if (!$ok) {
             break;
         }
     }
     return $ok;
 }