Index: flexinode.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/flexinode/flexinode.module,v
retrieving revision 1.82
diff -u -r1.82 flexinode.module
--- flexinode.module	23 Jan 2007 20:54:01 -0000	1.82
+++ flexinode.module	28 Jan 2007 00:52:53 -0000
@@ -145,23 +145,28 @@
  */
 function flexinode_load($node) {
   $ctype = flexinode_load_content_type(substr($node->type, 10));
-
-  // build the query
-  $fields_to_select = array();
-  $table_joins = array();
-
+  $flexinode_arr_data = array();
+  $flexinode_fields_data = db_query('SELECT * FROM {flexinode_data} fd WHERE fd.nid = %d', $node->nid);
+  $flexinode_arr = array();
+  while ($field_data = db_fetch_object($flexinode_fields_data)) {
+    $fieldname = 'flexinode_'. $field_data->field_id;
+    $flexinode_arr_data[$fieldname] = $field_data;
+  }
   foreach ($ctype->fields as $field) {
     $fieldname = 'flexinode_'. $field->field_id;
-
-    $fields_to_select[] = flexinode_invoke('db_select', $field);
-    $table_joins[] = 'LEFT JOIN {flexinode_data} '. $fieldname .' ON n.nid = '. $fieldname .'.nid AND '. $fieldname .'.field_id = ' . $field->field_id;
+    //example: flexinode_1.textual_data as flexinode_1, flexinode_1.numeric_data as flexinode_1_format 
+  	$fields_to_select = strtolower(flexinode_invoke('db_select', $field, $field));
+    // [[flexinode_1.textual_data as flexinode_1][flexinode_1.numeric_data as flexinode_1_format]]    
+    $field_arr1 = explode(',', $fields_to_select);
+    foreach ($field_arr1 as $field_tmp) {
+      //[[flexinode_1.textual_data][flexinode_1]]
+      $field_arr2 = explode(' as ', trim($field_tmp)); 
+      //[[flexinode_1][textual_data]]
+      $field_arr3 = explode('.', trim($field_arr2[0])); 
+      $flexinode_arr[trim($field_arr2[1])] = $flexinode_arr_data[trim($field_arr3[0])]->{trim($field_arr3[1])};
+    } 
   }
-
-  if (count($fields_to_select) > 0) {
-    // make the query
-    $flexinode = db_fetch_object(db_query('SELECT '. implode(', ', $fields_to_select) .' FROM {node} n '. implode(' ', $table_joins) .' WHERE n.nid = %d', $node->nid));
-
-    // unserialize necessary fields
+  $flexinode = (object)$flexinode_arr;
     foreach ($ctype->fields as $field) {
       $fieldname = 'flexinode_'. $field->field_id;
       $field_data = flexinode_invoke('load', $field, $flexinode);
@@ -169,10 +174,7 @@
         $flexinode->$fieldname = $field_data;
       }
     }
-  }
-
   $flexinode->ctype_id = $ctype->ctype_id;
-
   return $flexinode;
 }
 
