--- taxonomy_access.module	2010-09-04 16:42:13.000000000 -0500
+++ taxonomy_access.module.new	2010-09-06 08:54:01.000000000 -0500
@@ -142,33 +142,32 @@
  * Implements hook_node_access_records().
  *
  * @todo
- *    Get query to behave properly when no term or vocab record is present.
+ *    Get 1st query to behave properly when no term or vocab record is present.
  */
 function taxonomy_access_node_access_records($node) {
   $grants = array();
 
-  if (is_array($node->taxonomy) AND count($node->taxonomy)) {
-    /**
-     * @todo
-     *    How does deny/ignore work with this?
-     */
-    $result = db_query('SELECT tadg.rid,
-                       BIT_OR(COALESCE( ta.grant_view, tad.grant_view, tadg.grant_view )) AS grant_view,
-                       BIT_OR(COALESCE( ta.grant_update, tad.grant_update, tadg.grant_update )) AS grant_update,
-                       BIT_OR(COALESCE( ta.grant_delete, tad.grant_delete, tadg.grant_delete )) AS grant_delete
-                       FROM {term_node} tn
-                       INNER JOIN {term_data} t ON t.tid = tn.tid
-                       INNER JOIN {term_access_defaults} tadg ON tadg.vid = 0
-                       LEFT JOIN {term_access_defaults} tad ON tad.vid = t.vid AND tad.rid = tadg.rid
-                       LEFT JOIN {term_access} ta ON ta.tid = t.tid AND ta.rid = tadg.rid
-                       WHERE tn.vid = %d
-                       GROUP BY tadg.rid', $node->vid);
-  }
-  else {
+  $result = db_query(
+    'SELECT tadg.rid,
+     BIT_OR(COALESCE( ta.grant_view, tad.grant_view, tadg.grant_view )) AS grant_view,
+     BIT_OR(COALESCE( ta.grant_update, tad.grant_update, tadg.grant_update )) AS grant_update,
+     BIT_OR(COALESCE( ta.grant_delete, tad.grant_delete, tadg.grant_delete )) AS grant_delete
+     FROM {term_node} tn
+     INNER JOIN {term_data} t ON t.tid = tn.tid
+     INNER JOIN {term_access_defaults} tadg ON tadg.vid = 0
+     LEFT JOIN {term_access_defaults} tad ON tad.vid = t.vid AND tad.rid = tadg.rid
+     LEFT JOIN {term_access} ta ON ta.tid = t.tid AND ta.rid = tadg.rid
+     WHERE tn.vid = %d
+     GROUP BY tadg.rid', $node->vid);
+
+  // First query returns no rows if there is no {term_node} data for the node.
+  // In that scenario, use the global default.
+  if (!db_affected_rows($result)) {
     // Use the default for nodes with no category
-    $result = db_query('SELECT n.nid, tadg.rid AS rid, tadg.grant_view AS grant_view, tadg.grant_update AS grant_update, tadg.grant_delete AS grant_delete
-                       FROM {node} n INNER JOIN {term_access_defaults} tadg ON tadg.vid = 0
-                       WHERE n.nid = %d', $node->nid);
+    $result = db_query(
+      'SELECT n.nid, tadg.rid AS rid, tadg.grant_view AS grant_view, tadg.grant_update AS grant_update, tadg.grant_delete AS grant_delete
+       FROM {node} n INNER JOIN {term_access_defaults} tadg ON tadg.vid = 0
+       WHERE n.nid = %d', $node->nid);
   }
 
   // Ignore => 0, Allow => 1, Deny => 2 ('10' in binary).
