Index: Solr_Base_Query.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/apachesolr/Solr_Base_Query.php,v
retrieving revision 1.1.4.15
diff -u -r1.1.4.15 Solr_Base_Query.php
--- Solr_Base_Query.php	17 Dec 2008 17:27:24 -0000	1.1.4.15
+++ Solr_Base_Query.php	18 Dec 2008 06:59:14 -0000
@@ -57,7 +57,7 @@
       return $values['#name']. ':'. $values['#value'];
     }
   }
-  
+
   /**
    * Static shared by all instances, used to increment ID numbers.
    */
@@ -74,7 +74,7 @@
    */
   protected $fields;
   protected $filters;
-  
+
   /**
    * An array of subqueries.
    */
@@ -291,7 +291,7 @@
       $subfq = $data['#query']->get_fq();
       if ($subfq) {
         $operator = $data['#fq_operator'];
-        $fq[] = implode(" {$operator} ", $subfq);
+        $fq[] = "(" . implode(" {$operator} ", $subfq) .")";
       }
     }
     return $fq;
Index: Drupal_Apache_Solr_Service.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/apachesolr/Attic/Drupal_Apache_Solr_Service.php,v
retrieving revision 1.1.2.7
diff -u -r1.1.2.7 Drupal_Apache_Solr_Service.php
--- Drupal_Apache_Solr_Service.php	11 Dec 2008 16:06:20 -0000	1.1.2.7
+++ Drupal_Apache_Solr_Service.php	18 Dec 2008 06:59:14 -0000
@@ -127,12 +127,12 @@
       500 => 'Internal Server Error', 501 => 'Not Implemented', 502 => 'Bad Gateway', 503 => 'Service Unavailable', 504 => 'Gateway Time-out', 505 => 'HTTP Version not supported'
     );
 
-    if (!isset($responses[$code])) {
+    if (!isset($responses[$result->code])) {
       $code = floor($code / 100) * 100;
     }
 
     $protocol = "HTTP/1.1";
-    $headers[] = "{$protocol} {$result->code} {$responses[$code]}";
+    $headers[] = "{$protocol} {$result->code} {$responses[$result->code]}";
 
     foreach ($result->headers as $name => $value) {
       $headers[] = "$name: $value";
Index: tests/solr_base_subquery.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/apachesolr/tests/Attic/solr_base_subquery.test,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 solr_base_subquery.test
--- tests/solr_base_subquery.test	21 Nov 2008 21:23:36 -0000	1.1.2.3
+++ tests/solr_base_subquery.test	18 Dec 2008 06:59:15 -0000
@@ -1,11 +1,6 @@
 <?php
 // $Id: solr_base_subquery.test,v 1.1.2.3 2008/11/21 21:23:36 pwolanin Exp $
 
-/***
- *  JacobSingh: These are totally broken due to $hash var in apachesolr_search.module
- *
- */
-
 class DrupalSolrSubQueryTests extends DrupalWebTestCase {
   function getInfo() {
     return array('name' => 'Subquery handling',
@@ -17,28 +12,74 @@
     parent::setUp('search', 'apachesolr');
   }
 
-  function testSubQueries() {
-    $query1 = apachesolr_drupal_query("foo");
-    $query2 = apachesolr_drupal_query("bar");
+  function testSubQueriesQuery() {
+    $query1 = apachesolr_drupal_query('foo', '', '', TRUE);
+    $query2 = apachesolr_drupal_query('bar');
+    $query3 = apachesolr_drupal_query('baz');
+
     $query1->add_subquery($query2);
-    $this->assertEqual($query1->get_query(), 'foo AND (bar)', 'foo AND (bar)');
+    $this->assertEqual($query1->get_query_basic(), 'foo AND (bar)', 'foo AND (bar)');
+
     $query1->remove_subquery($query2);
-    $this->assertEqual($query1->get_query(), 'foo', t('Remove bar query'));
+    $this->assertEqual($query1->get_query_basic(), 'foo', t('Remove bar query'));
+
     $query1->add_subquery($query2);
     $query1->add_subquery($query2);
     $query1->add_subquery($query2);
-    $this->assertEqual($query1->get_query(), 'foo AND (bar)', t('Add bar several times; should only appear once.'));
+    $this->assertEqual($query1->get_query_basic(), 'foo AND (bar)', t('Add bar several times; should only appear once.'));
+
     $query1->remove_subquery($query2);
-    $query1->add_subquery($query2, 'OR');
-    $this->assertEqual($query1->get_query(), 'foo OR (bar)', 'foo OR (bar)');
-    $query3 = apachesolr_drupal_query("uid:1 tid:5");
-    $query2->add_subquery($query3);
-    $this->assertEqual($query1->get_query(), 'foo OR (bar AND (uid:1 tid:5))', t('Sub-sub query'));
-    // Test getting a query from the apachesolr_drupal_query factory
-    $query4 = apachesolr_drupal_query('foo');
-    $this->assertEqual($query4->get_query(), 'foo OR (bar AND (uid:1 tid:5))', t('Sub-sub query'));
-    $query5 = apachesolr_drupal_query('bar');
-    $query4->remove_subquery($query5);
-    $this->assertEqual($query4->get_query(), 'foo', t('Remove bar query'));
+    $query1->add_subquery($query2, '', 'OR');
+    $this->assertEqual($query1->get_query_basic(), 'foo OR (bar)', 'foo OR (bar)');
+
+    $query1->add_subquery($query3);
+    $query1->remove_subquery($query2);
+    $this->assertEqual($query1->get_query_basic(), 'foo AND (baz)', 'foo AND (baz)');
+  }
+
+  function testSubQueriesFilter() {
+    $query1 = apachesolr_drupal_query('', 'uid:1 tid:5', '', TRUE);
+    $query2 = apachesolr_drupal_query('', 'uid:10');
+    $query3 = apachesolr_drupal_query('', 'uid:2');
+    $query4 = apachesolr_drupal_query('', 'title:baz');
+
+    $query2->add_subquery($query1,'OR');
+    $test1 = clone $query2;
+
+    $query3->add_subquery($query1, 'AND');
+    $query3->add_subquery($query4);
+    $test2 = clone $query3;
+
+    $query3->remove_subquery($query1);
+    $test3 = clone $query3;
+
+
+    $tests = array(
+      "filters=uid:10 (uid:1 OR tid:5)" => $test1,
+      'filters=uid:2 (uid:1 AND tid:5)' => $test2,
+      'filters=uid:2 (title:baz)' => $test3,
+    );
+
+    foreach ($tests as $expected => $query_obj) {
+      $got = $query_obj->get_url_querystring();
+      $this->assertEqual($got, $expected, t('SubQuery: Expected @expected, got @got',array('@expected' => $expected, '@got' => $got)));
+    }
   }
+
+  // Test getting a query from the apachesolr_drupal_query factory
+  function testStaticFactory() {
+    $query1 = apachesolr_drupal_query('foo', '', '', TRUE);
+    $query2 = apachesolr_drupal_query('bar', 'title:baz');
+    $query3 = apachesolr_drupal_query('', 'tid:5 uid:10');
+
+    $query2->add_subquery($query1);
+    $query4 = apachesolr_drupal_query('bar', 'title:baz'); // same as $query2
+    $this->assertEqual($query4->get_query_basic() .'?'. $query4->get_url_querystring(), 'bar AND (foo)?filters=title:baz');
+
+    $query5 = apachesolr_drupal_query('bar', 'title:baz'); // same as $query2
+    $query5->add_subquery($query3);
+    $query5->remove_subquery($query1);
+    $this->assertEqual($query5->get_query_basic() .'?'. $query5->get_url_querystring(), 'bar?filters=title:baz OR (tid:5 uid:10)');
+  }
+
 }
\ No newline at end of file
