Index: /tags/ipp-20110622/ippTools/share/dqstatstool_definebyquery.sql
===================================================================
--- /tags/ipp-20110622/ippTools/share/dqstatstool_definebyquery.sql	(revision 31917)
+++ /tags/ipp-20110622/ippTools/share/dqstatstool_definebyquery.sql	(revision 31918)
@@ -4,4 +4,5 @@
 	JOIN chipRun USING(exp_id) 
 	JOIN camRun USING(chip_id) 
+	JOIN camProcessedExp USING(cam_id)
 	LEFT OUTER JOIN fakeRun USING(cam_id) 
 	LEFT OUTER JOIN warpRun USING(fake_id)
Index: /tags/ipp-20110622/ippTools/src/dqstatstool.c
===================================================================
--- /tags/ipp-20110622/ippTools/src/dqstatstool.c	(revision 31917)
+++ /tags/ipp-20110622/ippTools/src/dqstatstool.c	(revision 31918)
@@ -92,5 +92,5 @@
   }
   else {
-    psStringAppend(&query, " AND (warp_id IS NOT NULL AND invalid IS NULL) ");
+    psStringAppend(&query, " AND ((warp_id IS NOT NULL OR camProcessedExp.quality > 0) AND invalid IS NULL) ");
   }
 
@@ -622,10 +622,10 @@
       }
       else if (!strcmp(colType,"PS_DATA_STRING")) {
-        if (rowItem->data.str) {
-            success = psMetadataAddStr(tableRow,PS_LIST_TAIL,colName,0,"",rowItem->data.str);
-        } else {
+        if (rowItem->data.str == NULL) {
+            // psFits blows up on a string with a null value.
+            // Arguably I should fix psLib.db should handle this
             rowItem->data.str = psStringCopy("NULL");
-            success = psMetadataAddStr(tableRow,PS_LIST_TAIL,colName,0,"",rowItem->data.str);
         }
+        success = psMetadataAddStr(tableRow,PS_LIST_TAIL,colName,0,"",rowItem->data.str);
       }
       else if (!strcmp(colType,"PS_DATA_TIME")) {
