From e997199cd141725ae85d15ede4635d9961af2710 Mon Sep 17 00:00:00 2001
From: Karl Fritsche <karl.fritsche@cocomore.com>
Date: Sat, 26 Feb 2011 11:41:05 +0100
Subject: [PATCH] Issue #846544 by kfritsche: PostgreSQL support.

---
 storm_contrib_common/storm_contrib_common.install  |  114 +++++++----
 storm_contrib_common/storm_contrib_common.module   |   27 ++-
 storm_contrib_costs/storm_contrib_costs.install    |   37 ++--
 storm_contrib_costs/storm_contrib_costs.module     |  212 ++++++++------------
 storm_dependencies/storm_dependencies.module       |   59 +-----
 .../stormexpense_extension.module                  |   14 +-
 .../storminvoice_extension.module                  |    4 +-
 .../stormorganization_extension.module             |    4 +-
 .../stormperson_utilisation.module                 |   49 ++---
 .../stormproject_extension.install                 |   12 +-
 .../stormproject_extension.module                  |  112 ++++++-----
 stormtask_extension/stormtask_extension.module     |   24 +-
 .../stormticket_assignment.install                 |   12 +-
 .../stormticket_assignment.module                  |   23 +-
 stormticket_extension/stormticket_extension.module |   24 +-
 .../stormtimetracking_extension.install            |   12 +-
 .../stormtimetracking_extension.module             |  149 ++++++--------
 .../stormtimetracking_favorites.module             |   53 ++---
 18 files changed, 419 insertions(+), 522 deletions(-)

diff --git a/storm_contrib_common/storm_contrib_common.install b/storm_contrib_common/storm_contrib_common.install
index 763dd7f..b73ba81 100644
--- a/storm_contrib_common/storm_contrib_common.install
+++ b/storm_contrib_common/storm_contrib_common.install
@@ -124,28 +124,54 @@ function storm_contrib_common_modify_columns($from, $to, $update = TRUE) {
  * Implementation of hook_install().
  */
 function storm_contrib_common_install() {
-  // CHANGE ALL COLUMNS FROM INT TO BIGINT
-  storm_contrib_common_modify_columns('int', 'bigint', FALSE);
+
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      // CHANGE ALL COLUMNS FROM INT TO BIGINT
+      storm_contrib_common_modify_columns('int', 'bigint', FALSE);
+      break;
+
+    case 'pgsql':
+      storm_contrib_common_modify_columns('serial', 'bigserial', FALSE);
+      break;
+
+  }
 
   // SET CUSTOM DATE FORMAT WITHOUT TIME
   if (module_exists('date')) {
 
+    variable_set('date_format_german_date_without_time', 'd. M. Y');
+    variable_set('date_format_german_date_4_system', 'd. M. Y');
+    variable_set('storm_contrib_common_custom_display_date_format', 'd. M. Y');
+    variable_set('storm_contrib_common_custom_system_date_format', 'd. M. Y');
+
     switch ($GLOBALS['db_type']) {
       case 'mysql':
       case 'mysqli':
 
-        db_query('INSERT INTO {variable} SET name = "storm_contrib_common_custom_display_date_format", value = "s:36:\"date_format_german_date_without_time\";" ON DUPLICATE KEY UPDATE value = "s:36:\"date_format_german_date_without_time\";" ');
-        db_query('INSERT INTO {variable} SET name = "date_format_german_date_without_time", value = "s:7:\"d. M. Y\";" ON DUPLICATE KEY UPDATE value = "s:7:\"d. M. Y\";" ');
-        db_query('INSERT INTO {variable} SET name = "date_format_german_date_4_system", value = "s:7:\"d. M. Y\";" ON DUPLICATE KEY UPDATE value = "s:7:\"d. M. Y\";" ');
-        db_query('INSERT INTO {date_format_types} SET type = "german_date_without_time", title = "German date without time", locked = 0 ON DUPLICATE KEY UPDATE locked = 0 ');
-        db_query('INSERT INTO {date_format_types} SET type = "german_date_4_system", title = "German date for system", locked = 0 ON DUPLICATE KEY UPDATE locked = 0 ');
-        db_query('INSERT INTO {date_formats} SET format = "d. M. Y", type = "custom", locked = 0 ON DUPLICATE KEY UPDATE locked = 0 ');
-        db_query('INSERT INTO {variable} SET name = "storm_contrib_common_custom_display_date_format", value = "s:7:\"d. M. Y\";" ON DUPLICATE KEY UPDATE value = "s:7:\"d. M. Y\";" ');
-        db_query('INSERT INTO {variable} SET name = "storm_contrib_common_custom_system_date_format", value = "s:7:\"d. M. Y\";" ON DUPLICATE KEY UPDATE value = "s:7:\"d. M. Y\";" ');
+        db_query("INSERT INTO {date_format_types} (type, title, locked) VALUES ('%s', '%s', %d) ON DUPLICATE KEY UPDATE locked = %d", 'german_date_without_time', 'German date without time', 0, 0);
+        db_query("INSERT INTO {date_format_types} (type, title, locked) VALUES ('%s', '%s', %d) ON DUPLICATE KEY UPDATE locked = %d", 'german_date_4_system', 'German date for system', 0, 0);
+        db_query("INSERT INTO {date_formats} (format, type, locked) VALUES ('%s', '%s', %d) ON DUPLICATE KEY UPDATE locked = %d", 'd. M. Y', 'custom', 0, 0);
 
         break;
       case 'pgsql':
-        // TODO
+
+        db_query("UPDATE {date_format_types} SET locked = %d WHERE type = '%s' AND title = '%s'", 0, "german_date_without_time", "German date without time");
+        if (!db_affected_rows()) {
+          @db_query("INSERT INTO {date_format_types} (type, title, locked) VALUES ('%s', '%s', %d)", "german_date_without_time", "German date without time", 0);
+        }
+
+        db_query("UPDATE {date_format_types} SET locked = %d WHERE type = '%s' AND title = '%s'", 0, "german_date_4_system", "German date for system");
+        if (!db_affected_rows()) {
+          @db_query("INSERT INTO {date_format_types} (type, title, locked) VALUES ('%s', '%s', %d)", "german_date_4_system", "German date for system", 0);
+        }
+
+        db_query("UPDATE {date_formats} SET locked = %d WHERE format = '%s' AND type = '%s'", 0, "d. M. Y", "custom");
+        if (!db_affected_rows()) {
+          @db_query("INSERT INTO {date_formats} (format, type, locked) VALUES('%s', '%s',%d)", "d. M. Y", "custom", 0);
+        }
+
         break;
     }
 
@@ -251,21 +277,11 @@ function storm_contrib_common_insert_terms($vid, $term_names) {
   if (!empty($vid) && is_numeric($vid) && !empty($term_names) && is_array($term_names)) {
     foreach ($term_names as $term_name) {
 
-      switch ($GLOBALS['db_type']) {
-        case 'mysql':
-        case 'mysqli':
-
-          db_query('INSERT INTO {term_data} SET vid = %d, name = "%s" ', $vid, $term_name);
-
-          $tid = db_result(db_query('SELECT tid FROM {term_data} WHERE vid = %d AND name = "%s" ', $vid, $term_name));
-          if (!empty($tid)) {
-            db_query('INSERT INTO {term_hierarchy} SET tid = %d, parent = 0 ', $tid);
-          }
+      db_query("INSERT INTO {term_data} (vid, name) VALUES (%d, '%s')", $vid, $term_name);
 
-          break;
-        case 'pgsql':
-          // TODO
-          break;
+      $tid = db_result(db_query("SELECT tid FROM {term_data} WHERE vid = %d AND name = '%s'", $vid, $term_name));
+      if (!empty($tid)) {
+        db_query("INSERT INTO {term_hierarchy} (tid, parent) VALUES (%d, 0)", $tid);
       }
 
     }
@@ -280,27 +296,30 @@ function storm_contrib_common_insert_terms($vid, $term_names) {
  */
 function storm_contrib_common_uninstall() {
   // CHANGE ALL COLUMNS FROM BIGINT TO INT
-  storm_contrib_common_modify_columns('bigint', 'int', FALSE);
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      // CHANGE ALL COLUMNS FROM INT TO BIGINT
+      storm_contrib_common_modify_columns('bigint', 'int', FALSE);
+      break;
+
+    case 'pgsql':
+      storm_contrib_common_modify_columns('bigserial', 'serial', FALSE);
+      break;
+
+  }
 
   // RESET CUSTOM DATE FORMAT WITHOUT TIME
   if (module_exists('date')) {
 
-    switch ($GLOBALS['db_type']) {
-      case 'mysql':
-      case 'mysqli':
-
-        db_query('DELETE FROM {variable} WHERE name = "storm_contrib_common_custom_display_date_format" ');
-        db_query('DELETE FROM {variable} WHERE name = "date_format_german_date_without_time" ');
-        db_query('DELETE FROM {variable} WHERE name = "date_format_german_date_4_system" ');
-        db_query('DELETE FROM {date_format_types} WHERE type = "german_date_without_time" ');
-        db_query('DELETE FROM {date_format_types} WHERE type = "german_date_4_system" ');
-        db_query('DELETE FROM {date_formats} WHERE format = "d. M. Y" AND type = "custom" ');
+    variable_del("storm_contrib_common_custom_display_date_format");
+    variable_del('storm_contrib_common_custom_system_date_format');
+    variable_del("date_format_german_date_without_time");
+    variable_del("date_format_german_date_4_system");
 
-        break;
-      case 'pgsql':
-        // TODO
-        break;
-    }
+    db_query("DELETE FROM {date_format_types} WHERE type = 'german_date_without_time'");
+    db_query("DELETE FROM {date_format_types} WHERE type = 'german_date_4_system'");
+    db_query("DELETE FROM {date_formats} WHERE format = 'd. M. Y' AND type = 'custom'");
 
   }
 
@@ -328,7 +347,18 @@ function storm_contrib_common_uninstall() {
  */
 function storm_contrib_common_update_6001() {
   // CHANGE ALL COLUMNS FROM INT TO BIGINT
-  $return = storm_contrib_common_modify_columns('int', 'bigint');
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      // CHANGE ALL COLUMNS FROM INT TO BIGINT
+      $return = storm_contrib_common_modify_columns('int', 'bigint', FALSE);
+      break;
+
+    case 'pgsql':
+      $return = storm_contrib_common_modify_columns('serial', 'bigserial', FALSE);
+      break;
+
+  }
   drupal_set_message(t('Changed the following column names from int into bigint @values.', array('@values' => implode(', ', storm_contrib_common_columns_to_become_bigint()))), 'status');
   return $return;
 }
diff --git a/storm_contrib_common/storm_contrib_common.module b/storm_contrib_common/storm_contrib_common.module
index ecceca7..b8f41af 100644
--- a/storm_contrib_common/storm_contrib_common.module
+++ b/storm_contrib_common/storm_contrib_common.module
@@ -483,11 +483,11 @@ function storm_contrib_common_get_storm_nodes($node_type) {
       case 'stormperson':
       case 'stormteam':
         $result = db_query(db_rewrite_sql(
-        'SELECT n.nid, n.title FROM {node} n
+        "SELECT n.nid, n.title FROM {node} n
         LEFT JOIN {%s} s ON n.vid = s.vid
         WHERE n.status = 1
-        AND n.type="%s"
-        ORDER BY title',
+        AND n.type='%s'
+        ORDER BY title",
         'n', 'nid', array($node_type, $node_type)), $node_type, $node_type);
         if (!empty($result)) {
           while ($row = db_fetch_array($result)) {
@@ -575,7 +575,7 @@ function storm_contrib_common_get_stormpersons($filter = array(), $return_type =
 
         // STORMPERSON LIKE
         case 'stormpersonlike':
-          $where[] = 'spe.fullname LIKE "%%%s%" ';
+          $where[] = "spe.fullname LIKE '%%%s%' ";
           $args[] = $value;
           break;
 
@@ -652,7 +652,7 @@ function storm_contrib_common_get_stormteam_members($nid, $vid = 0) {
     $sql  = 'SELECT ste.mnid, n.title FROM {stormteam} ste ';
     $sql .= 'INNER JOIN {node} AS n ON n.vid = ste.vid ';
     $sql .= 'WHERE n.status = 1 ';
-    $sql .= 'AND n.type = "stormteam" ';
+    $sql .= 'AND n.type = \'stormteam\' ';
     $sql .= 'AND ste.nid = %d ';
     $args[] = $nid;
     $sql .= 'AND ste.vid = %d ';
@@ -662,7 +662,7 @@ function storm_contrib_common_get_stormteam_members($nid, $vid = 0) {
     $sql  = 'SELECT ste.mnid, n.title FROM {stormteam} ste ';
     $sql .= 'INNER JOIN {node} AS n ON n.vid = ste.vid ';
     $sql .= 'WHERE n.status = 1 ';
-    $sql .= 'AND n.type = "stormteam" ';
+    $sql .= 'AND n.type = \'stormteam\' ';
     $sql .= 'AND ste.nid = %d ';
     $args[] = $nid;
   }
@@ -1525,7 +1525,7 @@ function storm_contrib_common_get_stormprojects($filter = array(), $return_type
  */
 function storm_contrib_common_get_system_date_formats($display_as_time = FALSE) {
   $date_formats = array();
-  $sql  = 'SELECT name, value FROM {variable} WHERE name LIKE "date_format_%%" ';
+  $sql  = "SELECT name, value FROM {variable} WHERE name LIKE 'date_format_%%' ";
   $result = db_query($sql);
   if (!empty($result)) {
     while ($row = db_fetch_array($result)) {
@@ -2726,7 +2726,18 @@ function storm_contrib_common_cron() {
 
     // CHANGE ALL SPECIFIED DB TABLE COLUMNS FROM INT TO BIGINT
     module_load_include('install', 'storm_contrib_common', 'storm_contrib_common');
-    storm_contrib_common_modify_columns('int', 'bigint', FALSE);
+    switch ($GLOBALS['db_type']) {
+      case 'mysql':
+      case 'mysqli':
+        // CHANGE ALL COLUMNS FROM INT TO BIGINT
+        storm_contrib_common_modify_columns('int', 'bigint', FALSE);
+        break;
+
+      case 'pgsql':
+        storm_contrib_common_modify_columns('serial', 'bigserial', FALSE);
+        break;
+
+    }
     watchdog('storm contrib common', t('Cron to modify table columns from int to bigint has been executed') );
 
   }
diff --git a/storm_contrib_costs/storm_contrib_costs.install b/storm_contrib_costs/storm_contrib_costs.install
index d0bbe63..f6b7d96 100644
--- a/storm_contrib_costs/storm_contrib_costs.install
+++ b/storm_contrib_costs/storm_contrib_costs.install
@@ -167,28 +167,33 @@ function storm_contrib_costs_insert_currency_names() {
   
   if (!empty($currencies)) {
     foreach ($currencies as $currency_code => $currency_name) {
-      
+
+      $args = array();
+      $sql  = "INSERT INTO {storm_contrib_costs_currency_names} (currency_code, currency_name) VALUES ('%s', '%s')";
+      $args[] = $currency_code;
+      $args[] = $currency_name;
+
       switch ($GLOBALS['db_type']) {
         case 'mysql':
         case 'mysqli':
-         
-          $args = array();
-          $sql  = 'INSERT INTO {storm_contrib_costs_currency_names} SET ';
-          $sql .= 'currency_code = "%s", ';
-          $args[] = $currency_code;
-          $sql .= 'currency_name = "%s" ';
-          $args[] = $currency_name;
-          $sql .= 'ON DUPLICATE KEY UPDATE ';
-          $sql .= 'currency_name = "%s" ';
-          $args[] = $currency_name;
-          db_query($sql, $args);
-          
+            $sql .= "ON DUPLICATE KEY UPDATE ";
+            $sql .= "currency_name = '%s' ";
+            $args[] = $currency_name;
+            db_query($sql, $args);
+
           break;
+
         case 'pgsql':
-          // TODO
+
+            db_query("UPDATE {storm_contrib_costs_currency_names} SET currency_name = '%s' WHERE currency_code = '%s'", $currency_name, $currency_code);
+            if (!db_affected_rows()) {
+              @db_query($sql, $args);
+            }
+
           break;
       }
-      
+
+
     }
   }
   
@@ -274,4 +279,4 @@ function storm_contrib_costs_update_6001() {
   }
   
   return $ret;
-}
\ No newline at end of file
+}
diff --git a/storm_contrib_costs/storm_contrib_costs.module b/storm_contrib_costs/storm_contrib_costs.module
index ae43e8b..d8845d5 100644
--- a/storm_contrib_costs/storm_contrib_costs.module
+++ b/storm_contrib_costs/storm_contrib_costs.module
@@ -720,52 +720,51 @@ function storm_contrib_costs_save_persons_costs($op, $node) {
     // COSTS PER UNIT
     if (!empty($node->person_costs) && !empty($node->person_costs_unit)) {
 
-      $node->person_costs = str_replace(',', '.', $node->person_costs);
-
-      $args = array();
-      $sql  = 'INSERT INTO {storm_contrib_costs_person_costs} SET ';
-      $sql .= 'nid = %d, ';
-      $args[] = $node->nid;
-      $sql .= 'vid = %d, ';
-      $args[] = $node->vid;
-      $sql .= 'costs = %d, ';
-      $args[] = $node->person_costs;
-      $sql .= 'unit = "%s", ';
-      $args[] = $node->person_costs_unit;
-      $sql .= 'currency = "%s" ';
-      $args[] = $node->person_costs_currency;
-      $sql .= 'ON DUPLICATE KEY UPDATE ';
-      $sql .= 'costs = %d, ';
-      $args[] = $node->person_costs;
-      $sql .= 'unit = "%s", ';
-      $args[] = $node->person_costs_unit;
-      $sql .= 'currency = "%s" ';
-      $args[] = $node->person_costs_currency;
-      db_query($sql, $args);
+      $object = new stdClass();
+      $object->nid      = $node->nid;
+      $object->vid      = $node->vid;
+      $object->costs    = str_replace(',', '.', $node->person_costs);
+      $object->unit     = $node->person_costs_unit;
+      $object->currency = $node->person_costs_currency;
+
+      $update = array();
+      $op_update = FALSE;
+      if ($op == 'update') {
+        $count = db_result(db_query("SELECT COUNT(nid) FROM {storm_contrib_costs_person_costs} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+        if ($count > 0) {
+          $op_update = TRUE;
+        }
+      }
+      if ($op_update) {
+        $update[] = 'nid';
+        $update[] = 'vid';
+      }
+      drupal_write_record('storm_contrib_costs_person_costs', $object, $update);
 
     }
 
     // MONTHLY SALARY
     if (!empty($node->person_monthly_salary)) {
 
-      $node->person_monthly_salary = str_replace(',', '.', $node->person_monthly_salary);
-
-      $args = array();
-      $sql  = 'INSERT INTO {storm_contrib_costs_person_monthly_salary} SET ';
-      $sql .= 'nid = %d, ';
-      $args[] = $node->nid;
-      $sql .= 'vid = %d, ';
-      $args[] = $node->vid;
-      $sql .= 'monthly_salary = %d, ';
-      $args[] = $node->person_monthly_salary;
-      $sql .= 'currency = "%s" ';
-      $args[] = $node->person_monthly_salary_currency;
-      $sql .= 'ON DUPLICATE KEY UPDATE ';
-      $sql .= 'monthly_salary = %d, ';
-      $args[] = $node->person_monthly_salary;
-      $sql .= 'currency = "%s" ';
-      $args[] = $node->person_monthly_salary_currency;
-      db_query($sql, $args);
+      $object = new stdClass();
+      $object->nid            = $node->nid;
+      $object->vid            = $node->vid;
+      $object->monthly_salary = str_replace(',', '.', $node->person_monthly_salary);
+      $object->currency       = $node->person_monthly_salary_currency;
+
+      $update = array();
+      $op_update = FALSE;
+      if ($op == 'update') {
+        $count = db_result(db_query("SELECT COUNT(nid) FROM {storm_contrib_costs_person_monthly_salary} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+        if ($count > 0) {
+          $op_update = TRUE;
+        }
+      }
+      if ($op_update) {
+        $update[] = 'nid';
+        $update[] = 'vid';
+      }
+      drupal_write_record('storm_contrib_costs_person_monthly_salary', $object, $update);
 
     }
 
@@ -2498,43 +2497,24 @@ function storm_contrib_costs_node_save_estimated_costs($node, $estimated_costs)
 
   if (!empty($node) && !empty($estimated_costs)) {
 
-    $args = array();
+    $object = new stdClass();
+    $object->nid = $node->nid;
+    $object->vid = $node->vid;
+    $object->estimated_costs = $estimated_costs['estimated_costs'];
+    $object->estimated_costs_currency = $estimated_costs['estimated_costs_currency'];
+    $object->estimated_timetracking_costs = $estimated_costs['estimated_timetracking_costs'];
+    $object->estimated_timetracking_costs_currency = $estimated_costs['estimated_timetracking_costs_currency'];
+    $object->estimated_duration_in_hours = $estimated_costs['duration_in_hours'];
+    $object->calculation_type = $estimated_costs['costs_type'];
+    $object->last_updated = time();
 
-    $sql  = 'INSERT INTO {storm_contrib_costs_estimated_costs} SET ';
-    $sql .= 'nid = %d, ';
-    $args[] = $node->nid;
-    $sql .= 'vid = %d, ';
-    $args[] = $node->vid;
-    $sql .= 'estimated_costs = %f, ';
-    $args[] = $estimated_costs['estimated_costs'];
-    $sql .= 'estimated_costs_currency = "%s", ';
-    $args[] = $estimated_costs['estimated_costs_currency'];
-    $sql .= 'estimated_timetracking_costs = %f, ';
-    $args[] = $estimated_costs['estimated_timetracking_costs'];
-    $sql .= 'estimated_timetracking_costs_currency = "%s", ';
-    $args[] = $estimated_costs['estimated_timetracking_costs_currency'];
-    $sql .= 'estimated_duration_in_hours = %f, ';
-    $args[] = $estimated_costs['duration_in_hours'];
-    $sql .= 'calculation_type = "%s", ';
-    $args[] = $estimated_costs['costs_type'];
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'estimated_costs = %f, ';
-    $args[] = $estimated_costs['estimated_costs'];
-    $sql .= 'estimated_costs_currency = "%s", ';
-    $args[] = $estimated_costs['estimated_costs_currency'];
-    $sql .= 'estimated_timetracking_costs = %f, ';
-    $args[] = $estimated_costs['estimated_timetracking_costs'];
-    $sql .= 'estimated_timetracking_costs_currency = "%s", ';
-    $args[] = $estimated_costs['estimated_timetracking_costs_currency'];
-    $sql .= 'estimated_duration_in_hours = %f, ';
-    $args[] = $estimated_costs['duration_in_hours'];
-    $sql .= 'calculation_type = "%s", ';
-    $args[] = $estimated_costs['costs_type'];
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    db_query($sql, $args);
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(nid) FROM {storm_contrib_costs_estimated_costs} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+    if ($count > 0) {
+      $update[] = 'nid';
+      $update[] = 'vid';
+    }
+    drupal_write_record('storm_contrib_costs_estimated_costs', $object, $update);
 
   }
 
@@ -2666,43 +2646,24 @@ function storm_contrib_costs_node_save_total_costs($node, $trackings) {
 
   if (!empty($node) && !empty($trackings)) {
 
-    $args = array();
+    $object = new stdClass();
+    $object->nid = $node->nid;
+    $object->vid = $node->vid;
+    $object->total_costs = $trackings['total_costs'];
+    $object->total_costs_currency = $trackings['total_costs_currency'];
+    $object->total_timetracking_costs = $trackings['total_timetracking_costs'];
+    $object->total_timetracking_costs_currency = $trackings['total_timetracking_costs_currency'];
+    $object->total_duration_in_hours = $trackings['total_duration_in_hours'];
+    $object->total_billing_duration_in_hours = $trackings['total_billing_duration_in_hours'];
+    $object->last_updated = time();
 
-    $sql  = 'INSERT INTO {storm_contrib_costs_total_costs} SET ';
-    $sql .= 'nid = %d, ';
-    $args[] = $node->nid;
-    $sql .= 'vid = %d, ';
-    $args[] = $node->vid;
-    $sql .= 'total_costs = %f, ';
-    $args[] = $trackings['total_costs'];
-    $sql .= 'total_costs_currency = "%s", ';
-    $args[] = $trackings['total_costs_currency'];
-    $sql .= 'total_timetracking_costs = %f, ';
-    $args[] = $trackings['total_timetracking_costs'];
-    $sql .= 'total_timetracking_costs_currency = "%s", ';
-    $args[] = $trackings['total_timetracking_costs_currency'];
-    $sql .= 'total_duration_in_hours = %f, ';
-    $args[] = $trackings['total_duration_in_hours'];
-    $sql .= 'total_billing_duration_in_hours = %f, ';
-    $args[] = $trackings['total_billing_duration_in_hours'];
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'total_costs = %f, ';
-    $args[] = $trackings['total_costs'];
-    $sql .= 'total_costs_currency = "%s", ';
-    $args[] = $trackings['total_costs_currency'];
-    $sql .= 'total_timetracking_costs = %f, ';
-    $args[] = $trackings['total_timetracking_costs'];
-    $sql .= 'total_timetracking_costs_currency = "%s", ';
-    $args[] = $trackings['total_timetracking_costs_currency'];
-    $sql .= 'total_duration_in_hours = %f, ';
-    $args[] = $trackings['total_duration_in_hours'];
-    $sql .= 'total_billing_duration_in_hours = %f, ';
-    $args[] = $trackings['total_billing_duration_in_hours'];
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    db_query($sql, $args);
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(nid) FROM {storm_contrib_costs_total_costs} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+    if ($count > 0) {
+      $update[] = 'nid';
+      $update[] = 'vid';
+    }
+    drupal_write_record('storm_contrib_costs_total_costs', $object, $update);
 
   }
 
@@ -3046,20 +3007,17 @@ function storm_contrib_costs_save_currency_exchange_rate($currencyCode, $rate) {
 
   if (!empty($rate) && is_numeric($rate) && !empty($currencyCode)) {
 
-    $args = array();
-    $sql  = 'INSERT INTO {storm_contrib_costs_currency_exchange_rates} SET ';
-    $sql .= 'currency_code = "%s", ';
-    $args[] = $currencyCode;
-    $sql .= 'exchange_rate = %f, ';
-    $args[] = $rate;
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'exchange_rate = %f, ';
-    $args[] = $rate;
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    db_query($sql, $args);
+    $object = new stdClass();
+    $object->currency_code = $currencyCode;
+    $object->exchange_rate = $rate;
+    $object->last_updated = time();
+
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(currency_code) FROM {storm_contrib_costs_currency_exchange_rates} WHERE currency_code='%s'", $object->currency_code));
+    if ($count > 0) {
+      $update[] = 'currency_code';
+    }
+    drupal_write_record('storm_contrib_costs_currency_exchange_rates', $object, $update);
 
   }
 
@@ -3079,7 +3037,7 @@ function storm_contrib_costs_load_currency_exchange_rate($currencyCode = '') {
   $sql  = 'SELECT sce.currency_code, sce.exchange_rate, sce.last_updated ';
   $sql .= 'FROM {storm_contrib_costs_currency_exchange_rates} sce ';
   if (!empty($currencyCode)) {
-    $sql .= 'WHERE sce.currency_code = "%s" ';
+    $sql .= 'WHERE sce.currency_code = \'%s\' ';
     $args[] = $currencyCode;
   }
   $result = db_query(db_rewrite_sql($sql, 'sce', 'currency_code', $args), $args);
diff --git a/storm_dependencies/storm_dependencies.module b/storm_dependencies/storm_dependencies.module
index 3e53bf3..ac2e8be 100644
--- a/storm_dependencies/storm_dependencies.module
+++ b/storm_dependencies/storm_dependencies.module
@@ -275,7 +275,7 @@ function storm_dependencies_autocomplete_select_parent_node($string = '') {
   $sql .= 'LEFT JOIN {stormtask} sta ON n.vid = sta.vid ';
   $sql .= 'WHERE n.type IN ('. db_placeholders($dependable_node_types, 'varchar') .') ';
   $args = array_keys($dependable_node_types);
-  $sql .= 'AND n.title LIKE "%%%s%%" ';
+  $sql .= 'AND n.title LIKE \'%%%s%%\' ';
   $args[] = $string;
   $sql .= 'AND n.nid != %d ';
   $args[] = $_SESSION['STORM_DEPENDENCIES_CURRENT_STORM_NID'];
@@ -320,53 +320,18 @@ function storm_dependencies_save_parent_node($nid, $vid, $parent_nid) {
 
   if (!empty($nid) && is_numeric($nid) && !empty($vid) && is_numeric($vid) && !empty($parent_nid) && is_numeric($parent_nid)) {
 
-    $args = array();
-
-    // TODO USE ON DUPLICATE KEY UPDATE
-
-    // CHECK IF THERE IS ALREADY AN ENTRY FOR THIS TICKET
-    $result_check = db_query(db_rewrite_sql('SELECT std.parent_nid FROM {storm_dependencies} std WHERE std.vid = %d ', 'std', 'vid'), $vid);
-    if (!empty($result_check)) {
-
-      if (db_affected_rows($result_check) > 0) {
-
-        // THERE IS ALREADY AN ENTRY FOR THIS VID -> UPDATE
-        $old_parent_nid = db_result($result_check);
+    $object = new stdClass();
+    $object->nid      = $nid;
+    $object->vid      = $vid;
+    $object->parent_nid    = $parent_nid;
 
-        if ($old_parent_nid != $parent_nid) {
-
-          // A NEWS PARENT NID IS SELECTED
-          $sql  = 'UPDATE {storm_dependencies} SET ';
-          $sql .= 'parent_nid = %d ';
-          $args[] = $parent_nid;
-          $sql .= 'WHERE nid = %d ';
-          $args[] = $nid;
-          $sql .= 'AND vid = %d ';
-          $args[] = $vid;
-          db_query($sql, $args);
-
-        }
-        else {
-
-          // THE PARENT NID HAS NOT CHANGED - SO DO NOTHING
-
-        }
-
-      }
-      else {
-
-        // NO ENTRY -> INSERT
-        $sql  = 'INSERT INTO {storm_dependencies} SET ';
-        $sql .= 'nid = %d, ';
-        $args[] = $nid;
-        $sql .= 'vid = %d, ';
-        $args[] = $vid;
-        $sql .= 'parent_nid = %d ';
-        $args[] = $parent_nid;
-        db_query($sql, $args);
-
-      }
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(nid) FROM {storm_dependencies} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+    if ($count > 0) {
+      $update[] = 'nid';
+      $update[] = 'vid';
     }
+    drupal_write_record('storm_dependencies', $object, $update);
 
   }
 
@@ -799,4 +764,4 @@ function storm_dependencies_display_node_dependencies_and_assignments($node) {
   }
 
   return $content;
-}
\ No newline at end of file
+}
diff --git a/stormexpense_extension/stormexpense_extension.module b/stormexpense_extension/stormexpense_extension.module
index 4d450ae..4f65c97 100644
--- a/stormexpense_extension/stormexpense_extension.module
+++ b/stormexpense_extension/stormexpense_extension.module
@@ -201,9 +201,9 @@ function stormexpense_extension_get_expenses($node_type, $distinct_by_type = FAL
         $sql .= 'AND sex.organization_nid = %d ';
         $args[] = $node_type->nid;
         if ($distinct_by_type) {
-          $sql .= 'AND (sex.project_nid = "" OR sex.project_nid IS NULL) ';
-          $sql .= 'AND (sex.task_nid = "" OR sex.task_nid IS NULL) ';
-          $sql .= 'AND (sex.ticket_nid = "" OR sex.ticket_nid IS NULL) ';
+          $sql .= 'AND (sex.project_nid = \'\' OR sex.project_nid IS NULL) ';
+          $sql .= 'AND (sex.task_nid = \'\' OR sex.task_nid IS NULL) ';
+          $sql .= 'AND (sex.ticket_nid = \'\' OR sex.ticket_nid IS NULL) ';
         }
         break;
 
@@ -211,8 +211,8 @@ function stormexpense_extension_get_expenses($node_type, $distinct_by_type = FAL
         $sql .= 'AND sex.project_nid = %d ';
         $args[] = $node_type->nid;
         if ($distinct_by_type) {
-          $sql .= 'AND (sex.task_nid = "" OR sex.task_nid IS NULL) ';
-          $sql .= 'AND (sex.ticket_nid = "" OR sex.ticket_nid IS NULL) ';
+          $sql .= 'AND (sex.task_nid = \'\' OR sex.task_nid IS NULL) ';
+          $sql .= 'AND (sex.ticket_nid = \'\' OR sex.ticket_nid IS NULL) ';
         }
         break;
 
@@ -220,7 +220,7 @@ function stormexpense_extension_get_expenses($node_type, $distinct_by_type = FAL
         $sql .= 'AND sex.task_nid = %d ';
         $args[] = $node_type->nid;
         if ($distinct_by_type) {
-          $sql .= 'AND (sex.ticket_nid = "" OR sex.ticket_nid IS NULL) ';
+          $sql .= 'AND (sex.ticket_nid = \'\' OR sex.ticket_nid IS NULL) ';
         }
         break;
 
@@ -290,4 +290,4 @@ function stormexpense_extension_clone_node_alter($node, $original_node, $op) {
     }
 
   }
-}
\ No newline at end of file
+}
diff --git a/storminvoice_extension/storminvoice_extension.module b/storminvoice_extension/storminvoice_extension.module
index abe59eb..6f5daf0 100644
--- a/storminvoice_extension/storminvoice_extension.module
+++ b/storminvoice_extension/storminvoice_extension.module
@@ -198,7 +198,7 @@ function storminvoice_extension_get_invoices($node_type, $distinct_by_type = FAL
         $sql .= 'AND sin.organization_nid = %d ';
         $args[] = $node_type->nid;
         if ($distinct_by_type) {
-          $sql .= 'AND (sin.project_nid = "" OR sin.project_nid IS NULL) ';
+          $sql .= "AND (sin.project_nid = '' OR sin.project_nid IS NULL) ";
         }
         break;
 
@@ -286,4 +286,4 @@ function storminvoice_extension_clone_node_alter($node, $original_node, $op) {
     }
 
   }
-}
\ No newline at end of file
+}
diff --git a/stormorganization_extension/stormorganization_extension.module b/stormorganization_extension/stormorganization_extension.module
index 66438d6..6927cca 100644
--- a/stormorganization_extension/stormorganization_extension.module
+++ b/stormorganization_extension/stormorganization_extension.module
@@ -138,7 +138,7 @@ function stormorganization_extension_get_stormorganizations($filter = array(), $
             $args = $args + $value;
           }
           elseif (is_numeric($value)) {
-            $where[] = 'sor1.country = "%s" ';
+            $where[] = "sor1.country = '%s' ";
             $args[] = $value;
           }
           break;
@@ -150,7 +150,7 @@ function stormorganization_extension_get_stormorganizations($filter = array(), $
             $args = $args + $value;
           }
           elseif (is_numeric($value)) {
-            $where[] = 'sor1.orglanguage = "%s" ';
+            $where[] = "sor1.orglanguage = '%s' ";
             $args[] = $value;
           }
           break;
diff --git a/stormperson_utilisation/stormperson_utilisation.module b/stormperson_utilisation/stormperson_utilisation.module
index 9897ecf..d8704f9 100644
--- a/stormperson_utilisation/stormperson_utilisation.module
+++ b/stormperson_utilisation/stormperson_utilisation.module
@@ -507,42 +507,27 @@ function stormperson_utilisation_save($nid, $vid, $total_minutes = 0, $working_d
 
   if (!empty($nid) & !empty($vid)) {
 
-    $args = array();
-    $sql  = 'INSERT INTO {stormperson_utilisation} SET ';
-    $sql .= 'nid = %d, ';
-    $args[] = $nid;
-    $sql .= 'vid = %d, ';
-    $args[] = $vid;
-    $sql .= 'working_time_in_minutes_per_day = %d ';
-    $args[] = $total_minutes;
-
+    $object = new stdClass();
+    $object->nid      = $nid;
+    $object->vid      = $vid;
+    $object->working_time_in_minutes_per_day = $total_minutes;
     for ($i = 1; $i <= 7; $i++) {
-      $sql .= ', week_day_%d = %d ';
-      $args[] = $i;
+      $day_name = 'week_day_'.$i;
       if (!empty($working_day_in_week[$i])) {
-        $args[] = 1;
+        $object->$day_name = 1;
       }
       else {
-        $args[] = 0;
+        $object->$day_name = 0;
       }
     }
 
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'working_time_in_minutes_per_day = %d ';
-    $args[] = $total_minutes;
-
-    for ($i = 1; $i <= 7; $i++) {
-      $sql .= ', week_day_%d = %d ';
-      $args[] = $i;
-      if (!empty($working_day_in_week[$i])) {
-        $args[] = 1;
-      }
-      else {
-        $args[] = 0;
-      }
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(nid) FROM {stormperson_utilisation} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+    if ($count > 0) {
+      $update[] = 'nid';
+      $update[] = 'vid';
     }
-
-    db_query($sql, $args);
+    drupal_write_record('stormperson_utilisation', $object, $update);
 
   }
 
@@ -1122,8 +1107,8 @@ function stormperson_utilisation_get_person_tickets_of_day($node, $date) {
     $sql .= 'OR sti.dateend >= %d )';
     $args[] = $end_time;
 
-//    $sql .= 'AND sti.ticketstatus != "completed" '; // TODO CHECK THIS - SHOULD COMPLETED TICKETS BE USED FOR CALCULATION OF UTILISATION?
-//    $sql .= 'AND (sti.task_nid = "" OR sti.task_nid IS NULL) '; // DO NOT CACLCULATE UTILISATION OF TASKS AND TICKETS TWICE WHEN TICKETS ARE ASSIGNED TO TASKS
+//    $sql .= "AND sti.ticketstatus != 'completed' "; // TODO CHECK THIS - SHOULD COMPLETED TICKETS BE USED FOR CALCULATION OF UTILISATION?
+//    $sql .= "AND (sti.task_nid = '' OR sti.task_nid IS NULL) '; // DO NOT CACLCULATE UTILISATION OF TASKS AND TICKETS TWICE WHEN TICKETS ARE ASSIGNED TO TASKS
 
     $sql .= 'ORDER BY n.title ';
 
@@ -1189,7 +1174,7 @@ function stormperson_utilisation_get_person_tasks_of_day($node, $date, $tickets)
     $args[] = $start_time;
     $sql .= 'AND sta.dateend >= %d )';
     $args[] = $end_time;
-//    $sql .= 'AND sta.taskstatus != "completed" '; // TODO CHECK THIS - SHOULD COMPLETED TICKETS BE USED FOR CALCULATION OF UTILISATION?
+//    $sql .= "AND sta.taskstatus != 'completed' "; // TODO CHECK THIS - SHOULD COMPLETED TICKETS BE USED FOR CALCULATION OF UTILISATION?
     if (!empty($task_nids)) {
       $sql .= 'AND sta.nid NOT IN ('. db_placeholders($task_nids, 'int') .') ';
       $args = array_merge($args, $task_nids);
@@ -1439,4 +1424,4 @@ function stormperson_utilisation_holidays_calculate_not_working_days($time_start
 
   }
 
-}
\ No newline at end of file
+}
diff --git a/stormproject_extension/stormproject_extension.install b/stormproject_extension/stormproject_extension.install
index fd88156..7af234e 100644
--- a/stormproject_extension/stormproject_extension.install
+++ b/stormproject_extension/stormproject_extension.install
@@ -12,15 +12,7 @@
  */
 function stormproject_extension_install() {
   drupal_install_schema('stormproject_extension');
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      db_query("UPDATE {system} SET weight = 20 WHERE name = 'stormproject_extension'");
-      break;
-    case 'pgsql':
-      // TODO
-      break;
-  }
+  db_query("UPDATE {system} SET weight = 20 WHERE name = 'stormproject_extension'");
 }
 
 /**
@@ -97,4 +89,4 @@ function stormproject_extension_update_6001($sandbox) {
   );
   db_create_table($ret, 'stormproject_extension_project_status_mails', $schema['stormproject_extension_project_status_mails']);
   return $ret;
-}
\ No newline at end of file
+}
diff --git a/stormproject_extension/stormproject_extension.module b/stormproject_extension/stormproject_extension.module
index d8bfe71..a807d58 100644
--- a/stormproject_extension/stormproject_extension.module
+++ b/stormproject_extension/stormproject_extension.module
@@ -1386,7 +1386,7 @@ function stormproject_extension_display_balance_details($node) {
 
 
 /**
- * save the project_deadline
+ * save the project_status_mail
  *
  * @param unknown_type $op
  * @param unknown_type $node
@@ -1401,20 +1401,26 @@ function stormproject_extension_save_deadline($op, $node) {
     // CONSIDER TIMEZONE
     $deadline_time = storm_contrib_common_timestamp_to_gm($deadline_time); // SAVE DEADLINE IN GM TIMEZONE
 
-    $args = array();
-
     if (!empty($deadline_time)) {
 
-      $sql  = 'INSERT INTO {stormproject_extension_deadlines} SET ';
-      $sql .= 'nid = %d, ';
-      $args[] = $node->nid;
-      $sql .= 'vid = %d, ';
-      $args[] = $node->vid;
-      $sql .= 'deadline = %d ';
-      $args[] = $deadline_time;
-      $sql .= 'ON DUPLICATE KEY UPDATE deadline = %d ';
-      $args[] = $deadline_time;
-      db_query($sql, $args);
+      $object = new stdClass();
+      $object->nid      = $node->nid;
+      $object->vid      = $node->vid;
+      $object->deadline = $deadline_time;
+
+      $update = array();
+      $op_update = FALSE;
+      if ($op == 'update') {
+        $count = db_result(db_query("SELECT COUNT(nid) FROM {stormproject_extension_deadlines} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+        if ($count > 0) {
+          $op_update = TRUE;
+        }
+      }
+      if ($op_update) {
+        $update[] = 'nid';
+        $update[] = 'vid';
+      }
+      drupal_write_record('stormproject_extension_deadlines', $object, $update);
 
     }
 
@@ -1486,31 +1492,27 @@ function stormproject_extension_save_budget($op, $node) {
 
   if (!empty($node)) {
 
-    $args = array();
-
-    $sql  = 'INSERT INTO {stormproject_extension_budgets} SET ';
-    $sql .= 'nid = %d, ';
-    $args[] = $node->nid;
-    $sql .= 'vid = %d, ';
-    $args[] = $node->vid;
-    $sql .= 'budget_costs = %d, ';
-    $args[] = $node->budget_costs;
-    $sql .= 'budget_costs_currency = "%s", ';
-    $args[] = $node->budget_costs_currency;
-    $sql .= 'budget_duration = %d, ';
-    $args[] = $node->budget_duration;
-    $sql .= 'budget_duration_unit = "%s" ';
-    $args[] = $node->budget_duration_unit;
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'budget_costs = %d, ';
-    $args[] = $node->budget_costs;
-    $sql .= 'budget_costs_currency = "%s", ';
-    $args[] = $node->budget_costs_currency;
-    $sql .= 'budget_duration = %d, ';
-    $args[] = $node->budget_duration;
-    $sql .= 'budget_duration_unit = "%s" ';
-    $args[] = $node->budget_duration_unit;
-    db_query($sql, $args);
+    $object = new stdClass();
+    $object->nid      = $node->nid;
+    $object->vid      = $node->vid;
+    $object->budget_costs = $node->budget_costs;
+    $object->budget_costs_currency = $node->budget_costs_currency;
+    $object->budget_duration = $node->budget_duration;
+    $object->budget_duration_unit = $node->budget_duration_unit;
+
+    $update = array();
+    $op_update = FALSE;
+    if ($op == 'update') {
+      $count = db_result(db_query("SELECT COUNT(nid) FROM {stormproject_extension_budgets} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+      if ($count > 0) {
+        $op_update = TRUE;
+      }
+    }
+    if ($op_update) {
+      $update[] = 'nid';
+      $update[] = 'vid';
+    }
+    drupal_write_record('stormproject_extension_budgets', $object, $update);
 
   }
 
@@ -1585,18 +1587,24 @@ function stormproject_extension_save_status_mail($op, $node) {
 
   if (!empty($node->project_status_mail)) {
 
-    $args = array();
-
-    $sql  = 'INSERT INTO {stormproject_extension_project_status_mails} SET ';
-    $sql .= 'nid = %d, ';
-    $args[] = $node->nid;
-    $sql .= 'vid = %d, ';
-    $args[] = $node->vid;
-    $sql .= 'send_status_mail = %d ';
-    $args[] = $node->project_status_mail;
-    $sql .= 'ON DUPLICATE KEY UPDATE send_status_mail = %d ';
-    $args[] = $node->project_status_mail;
-    db_query($sql, $args);
+    $object = new stdClass();
+    $object->nid      = $node->nid;
+    $object->vid      = $node->vid;
+    $object->send_status_mail = $node->project_status_mail;
+
+    $update = array();
+    $op_update = FALSE;
+    if ($op == 'update') {
+      $count = db_result(db_query("SELECT COUNT(nid) FROM {stormproject_extension_project_status_mails} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+      if ($count > 0) {
+        $op_update = TRUE;
+      }
+    }
+    if ($op_update) {
+      $update[] = 'nid';
+      $update[] = 'vid';
+    }
+    drupal_write_record('stormproject_extension_project_status_mails', $object, $update);
 
   }
 
@@ -2084,9 +2092,9 @@ function stormproject_extension_get_all_open_projects() {
   $sql  = 'SELECT n.nid, n.vid, n.title ';
   $sql .= 'FROM {node} n ';
   $sql .= 'LEFT JOIN {stormproject} stp USING (vid) ';
-  $sql .= 'WHERE n.type = "%s" ';
+  $sql .= 'WHERE n.type = \'%s\' ';
   $args[] = 'stormproject';
-  $sql .= 'AND stp.projectstatus != "%s" ';
+  $sql .= 'AND stp.projectstatus != \'%s\' ';
   $args[] = 'completed';
   $result = db_query(db_rewrite_sql($sql, 'n', 'nid', $args), $args);
   if (!empty($result)) {
diff --git a/stormtask_extension/stormtask_extension.module b/stormtask_extension/stormtask_extension.module
index 147a83c..435aab4 100644
--- a/stormtask_extension/stormtask_extension.module
+++ b/stormtask_extension/stormtask_extension.module
@@ -610,18 +610,18 @@ function stormtask_extension_save_recurring_duration($node) {
 
   if (!empty($node)) {
 
-    $args = array();
-    $sql  = 'INSERT INTO {stormtask_extension_recurring_duration} SET ';
-    $sql .= 'nid = %d, ';
-    $args[] = $node->nid;
-    $sql .= 'vid = %d, ';
-    $args[] = $node->vid;
-    $sql .= 'is_recurring_duration = %d ';
-    $args[] = $node->is_recurring_duration;
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'is_recurring_duration = %d ';
-    $args[] = $node->is_recurring_duration;
-    db_query($sql, $args);
+    $object = new stdClass();
+    $object->nid      = $node->nid;
+    $object->vid      = $node->vid;
+    $object->is_recurring_duration = $node->is_recurring_duration;
+
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(nid) FROM {stormtask_extension_recurring_duration} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+    if ($count > 0) {
+      $update[] = 'nid';
+      $update[] = 'vid';
+    }
+    drupal_write_record('stormtask_extension_recurring_duration', $object, $update);
 
   }
 
diff --git a/stormticket_assigment/stormticket_assignment.install b/stormticket_assigment/stormticket_assignment.install
index 3cd6e96..d762628 100644
--- a/stormticket_assigment/stormticket_assignment.install
+++ b/stormticket_assigment/stormticket_assignment.install
@@ -11,17 +11,7 @@
 function stormticket_assignment_install() {
 
   drupal_install_schema('stormticket_assignment');
-
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      db_query("UPDATE {system} set weight = 5 WHERE name = 'stormticket_assignment';");
-      break;
-    case 'pgsql':
-      // TODO
-      break;
-  }
-
+  db_query("UPDATE {system} set weight = 5 WHERE name = 'stormticket_assignment';");
 
 }
 
diff --git a/stormticket_assigment/stormticket_assignment.module b/stormticket_assigment/stormticket_assignment.module
index e9cf4c5..01368c7 100644
--- a/stormticket_assigment/stormticket_assignment.module
+++ b/stormticket_assigment/stormticket_assignment.module
@@ -1094,16 +1094,17 @@ function stormticket_assignment_save_email_notification($node_person) {
     $node_person->email_notification_on_assignments = 0;
   }
 
-  $sql  = 'INSERT INTO {stormticket_assignment_email_notification} SET ';
-  $sql .= 'nid_person = %d, ';
-  $sql .= 'email_notification_on_assignments = %d, ';
-  $sql .= 'email_notification_on_modifications = %d ';
-  $sql .= 'ON DUPLICATE KEY UPDATE ';
-  $sql .= 'email_notification_on_assignments = %d, ';
-  $sql .= 'email_notification_on_modifications = %d ';
-  db_query($sql, $node_person->nid, $node_person->email_notification_on_assignments,
-  $node_person->email_notification_on_modifications, $node_person->email_notification_on_assignments,
-  $node_person->email_notification_on_modifications);
+  $object = new stdClass();
+  $object->nid_person = $node_person->nid;
+  $object->email_notification_on_assignments   = $node_person->email_notification_on_assignments;
+  $object->email_notification_on_modifications = $node_person->email_notification_on_modifications;
+
+  $update = array();
+  $count = db_result(db_query("SELECT COUNT(nid) FROM {stormticket_assignment_email_notification} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+  if ($count > 0) {
+    $update[] = 'nid_person';
+  }
+  drupal_write_record('stormticket_assignment_email_notification', $object, $update);
 
 }
 
@@ -1329,7 +1330,7 @@ function stormticket_assignment_get_assignment_history($node, $without_teams = F
     $args[] = $node->nid;
     $sql .= 'AND n.status = 1 ';
     if ($without_teams) {
-      $sql .= 'AND n.type != "stormteam" ';
+      $sql .= 'AND n.type != \'stormteam\' ';
     }
     $result = db_query(db_rewrite_sql($sql, 'n', 'nid', $args), $args);
     if (!empty($result)) {
diff --git a/stormticket_extension/stormticket_extension.module b/stormticket_extension/stormticket_extension.module
index f7f7cca..1c6b96e 100644
--- a/stormticket_extension/stormticket_extension.module
+++ b/stormticket_extension/stormticket_extension.module
@@ -453,18 +453,18 @@ function stormticket_extension_save_recurring_duration($node) {
 
   if (!empty($node)) {
 
-    $args = array();
-    $sql  = 'INSERT INTO {stormticket_extension_recurring_duration} SET ';
-    $sql .= 'nid = %d, ';
-    $args[] = $node->nid;
-    $sql .= 'vid = %d, ';
-    $args[] = $node->vid;
-    $sql .= 'is_recurring_duration = %d ';
-    $args[] = $node->is_recurring_duration;
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'is_recurring_duration = %d ';
-    $args[] = $node->is_recurring_duration;
-    db_query($sql, $args);
+    $object = new stdClass();
+    $object->nid      = $node->nid;
+    $object->vid      = $node->vid;
+    $object->is_recurring_duration = $node->is_recurring_duration;
+
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(nid) FROM {stormticket_extension_recurring_duration} WHERE nid=%d AND vid=%d", $object->nid, $object->vid));
+    if ($count > 0) {
+      $update[] = 'nid';
+      $update[] = 'vid';
+    }
+    drupal_write_record('stormticket_extension_recurring_duration', $object, $update);
 
   }
 
diff --git a/stormtimetracking_extension/stormtimetracking_extension.install b/stormtimetracking_extension/stormtimetracking_extension.install
index dfe2b39..8d08106 100644
--- a/stormtimetracking_extension/stormtimetracking_extension.install
+++ b/stormtimetracking_extension/stormtimetracking_extension.install
@@ -11,17 +11,7 @@
  */
 function stormtimetracking_extension_install() {
   drupal_install_schema('stormtimetracking_extension');
-
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      db_query('UPDATE {system} SET weight = 25 WHERE name = "stormtimetracking_extension" ');
-      break;
-    case 'pgsql':
-      // TODO
-      break;
-  }
-
+  db_query('UPDATE {system} SET weight = 25 WHERE name = "stormtimetracking_extension" ');
 }
 
 
diff --git a/stormtimetracking_extension/stormtimetracking_extension.module b/stormtimetracking_extension/stormtimetracking_extension.module
index 119b7a5..b0069a8 100644
--- a/stormtimetracking_extension/stormtimetracking_extension.module
+++ b/stormtimetracking_extension/stormtimetracking_extension.module
@@ -2842,53 +2842,40 @@ function stormtimetracking_extension_save_person_daily_statistic($node_person, $
 
   if (!empty($node_person) && !empty($project_trackings_array) && !empty($year) && !empty($month) && !empty($day) && is_numeric($year) && is_numeric($month) && is_numeric($day)) {
 
-    $args = array();
-    $sql  = 'INSERT INTO {stormtimetracking_extension_person_day_stats} SET ';
-    $sql .= 'nid_person = %d, ';
-    $args[] = $node_person->nid;
-    $sql .= 'nid_organization = %d, ';
-    $args[] = $node_organization->nid;
+    $object = new stdClass();
+    $object->nid_person      = $node_person->nid;
+    $object->nid_organization = $node_organization->nid;
     if (!empty($node_project)) {
-      $sql .= 'nid_project = %d, ';
-      $args[] = $node_project->nid;
+      $object->nid_project = $node_project->nid;
     }
-    $sql .= 'year = %d, ';
-    $args[] = $year;
-    $sql .= 'month = %d, ';
-    $args[] = $month;
-    $sql .= 'day = %d, ';
-    $args[] = $day;
-    $sql .= 'tracking_duration = %f, ';
-    $args[] = $project_trackings_array['total_duration'];
-    $sql .= 'tracking_billing_duration = %f, ';
-    $args[] = $project_trackings_array['total_billing_duration'];
-    $sql .= 'duration_costs = %f, ';
-    $args[] = $project_trackings_array['trackings']['total_costs'];
-    $sql .= 'duration_costs_currency = "%s", ';
-    $args[] = $project_trackings_array['trackings']['total_costs_currency'];
-    $sql .= 'billing_duration_costs = %f, ';
-    $args[] = $project_trackings_array['trackings']['total_billing_costs'];
-    $sql .= 'billing_duration_costs_currency = "%s", ';
-    $args[] = $project_trackings_array['trackings']['total_billing_costs_currency'];
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'tracking_duration = %f, ';
-    $args[] = $project_trackings_array['total_duration'];
-    $sql .= 'tracking_billing_duration = %f, ';
-    $args[] = $project_trackings_array['total_billing_duration'];
-    $sql .= 'duration_costs = %f, ';
-    $args[] = $project_trackings_array['trackings']['total_costs'];
-    $sql .= 'duration_costs_currency = "%s", ';
-    $args[] = $project_trackings_array['trackings']['total_costs_currency'];
-    $sql .= 'billing_duration_costs = %f, ';
-    $args[] = $project_trackings_array['trackings']['total_billing_costs'];
-    $sql .= 'billing_duration_costs_currency = "%s", ';
-    $args[] = $project_trackings_array['trackings']['total_billing_costs_currency'];
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-
-    db_query($sql, $args);
+    else {
+      $object->nid_project = 0;
+    }
+    $object->year = $year;
+    $object->month = $month;
+    $object->day = $day;
+
+    $object->tracking_duration = $project_trackings_array['total_duration'];
+    $object->tracking_billing_duration = $project_trackings_array['total_billing_duration'];
+    $object->duration_costs = $project_trackings_array['trackings']['total_costs'];
+    $object->duration_costs_currency = $project_trackings_array['trackings']['total_costs_currency'];
+    $object->billing_duration_costs = $project_trackings_array['trackings']['total_billing_costs'];
+    $object->billing_duration_costs_currency = $project_trackings_array['trackings']['total_billing_costs_currency'];
+    $object->last_updated = time();
+
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(nid) FROM {stormtimetracking_extension_person_day_stats} WHERE
+        nid_person=%d AND nid_organization=%d AND nid_project = %d AND year = %d AND month=%d AND day=%d",
+        $object->nid_person, $object->nid_organization, $object->nid_project, $object->year, $object->month, $object->day));
+    if ($count > 0) {
+      $update[] = 'nid_person';
+      $update[] = 'nid_organization';
+      $update[] = 'nid_project';
+      $update[] = 'year';
+      $update[] = 'month';
+      $update[] = 'day';
+    }
+    drupal_write_record('stormtimetracking_extension_person_day_stats', $object, $update);
 
   }
 
@@ -3196,50 +3183,38 @@ function stormtimetracking_extension_save_person_monthly_statistic($node_person,
 
   if (!empty($node_person) && !empty($project_trackings_array) && !empty($year) && !empty($month) && is_numeric($year) && is_numeric($month)) {
 
-    $args = array();
-    $sql  = 'INSERT INTO {stormtimetracking_extension_person_month_stats} SET ';
-    $sql .= 'nid_person = %d, ';
-    $args[] = $node_person->nid;
-    $sql .= 'nid_organization = %d, ';
-    $args[] = $node_organization->nid;
+    $object = new stdClass();
+    $object->nid_person      = $node_person->nid;
+    $object->nid_organization = $node_organization->nid;
     if (!empty($node_project)) {
-      $sql .= 'nid_project = %d, ';
-      $args[] = $node_project->nid;
+      $object->nid_project = $node_project->nid;
     }
-    $sql .= 'year = %d, ';
-    $args[] = $year;
-    $sql .= 'month = %d, ';
-    $args[] = $month;
-    $sql .= 'tracking_duration = %f, ';
-    $args[] = $project_trackings_array['total_duration'];
-    $sql .= 'tracking_billing_duration = %f, ';
-    $args[] = $project_trackings_array['total_billing_duration'];
-    $sql .= 'duration_costs = %f, ';
-    $args[] = $project_trackings_array['trackings']['total_costs'];
-    $sql .= 'duration_costs_currency = "%s", ';
-    $args[] = $project_trackings_array['trackings']['total_costs_currency'];
-    $sql .= 'billing_duration_costs = %f, ';
-    $args[] = $project_trackings_array['trackings']['total_billing_costs'];
-    $sql .= 'billing_duration_costs_currency = "%s", ';
-    $args[] = $project_trackings_array['trackings']['total_billing_costs_currency'];
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    $sql .= 'ON DUPLICATE KEY UPDATE ';
-    $sql .= 'tracking_duration = %f, ';
-    $args[] = $project_trackings_array['total_duration'];
-    $sql .= 'tracking_billing_duration = %f, ';
-    $args[] = $project_trackings_array['total_billing_duration'];
-    $sql .= 'duration_costs = %f, ';
-    $args[] = $project_trackings_array['trackings']['total_costs'];
-    $sql .= 'duration_costs_currency = "%s", ';
-    $args[] = $project_trackings_array['trackings']['total_costs_currency'];
-    $sql .= 'billing_duration_costs = %f, ';
-    $args[] = $project_trackings_array['trackings']['total_billing_costs'];
-    $sql .= 'billing_duration_costs_currency = "%s", ';
-    $args[] = $project_trackings_array['trackings']['total_billing_costs_currency'];
-    $sql .= 'last_updated = %d ';
-    $args[] = time();
-    db_query($sql, $args);
+    else {
+      $object->nid_project = 0;
+    }
+    $object->year = $year;
+    $object->month = $month;
+
+    $object->tracking_duration = $project_trackings_array['total_duration'];
+    $object->tracking_billing_duration = $project_trackings_array['total_billing_duration'];
+    $object->duration_costs = $project_trackings_array['trackings']['total_costs'];
+    $object->duration_costs_currency = $project_trackings_array['trackings']['total_costs_currency'];
+    $object->billing_duration_costs = $project_trackings_array['trackings']['total_billing_costs'];
+    $object->billing_duration_costs_currency = $project_trackings_array['trackings']['total_billing_costs_currency'];
+    $object->last_updated = time();
+
+    $update = array();
+    $count = db_result(db_query("SELECT COUNT(nid) FROM {stormtimetracking_extension_person_month_stats} WHERE
+        nid_person=%d AND nid_organization=%d AND nid_project = %d AND year = %d AND month=%d AND day=%d",
+        $object->nid_person, $object->nid_organization, $object->nid_project, $object->year, $object->month));
+    if ($count > 0) {
+      $update[] = 'nid_person';
+      $update[] = 'nid_organization';
+      $update[] = 'nid_project';
+      $update[] = 'year';
+      $update[] = 'month';
+    }
+    drupal_write_record('stormtimetracking_extension_person_month_stats', $object, $update);
 
   }
 
diff --git a/stormtimetracking_favorites/stormtimetracking_favorites.module b/stormtimetracking_favorites/stormtimetracking_favorites.module
index cf32bfd..67d5d0d 100644
--- a/stormtimetracking_favorites/stormtimetracking_favorites.module
+++ b/stormtimetracking_favorites/stormtimetracking_favorites.module
@@ -195,34 +195,21 @@ function stormtimetracking_favorites_insert_favorite($node, $account = NULL) {
 
     }
 
-
-    $args = array();
-    $sql  = 'INSERT INTO {stormtimetracking_favorites} SET ';
-    $sql .= 'uid = %d, ';
-    $args[] = $account->uid;
-    $sql .= 'nid = %d, ';
-    $args[] = $node->nid;
-    $sql .= 'organization_nid = %d, ';
-    $args[] = $node->organization_nid;
-    $sql .= 'organization_title = "%s", ';
-    $args[] = $node->organization_title;
-    $sql .= 'project_nid = %d, ';
-    $args[] = $project_nid;
-    $sql .= 'project_title = "%s", ';
-    $args[] = $project_title;
-    $sql .= 'task_nid = %d, ';
-    $args[] = $node->task_nid;
-    $sql .= 'task_title = "%s", ';
-    $args[] = $node->task_title;
-    $sql .= 'datebegin = %d, ';
-    $args[] = $node->datebegin;
-    $sql .= 'dateend = %d, ';
-    $args[] = $node->dateend;
-    $sql .= 'durationunit = "%s", ';
-    $args[] = $node->durationunit;
-    $sql .= 'duration = %d ';
-    $args[] = $node->duration;
-    db_query($sql, $args);
+      $object = new stdClass();
+      $object->nid      = $node->nid;
+      $object->uid      = $account->uid;
+      $object->organization_nid = $node->organization_nid;
+      $object->organization_title = $node->organization_title;
+      $object->project_nid = $project_nid;
+      $object->project_title = $project_title;
+      $object->task_nid = $node->task_nid;
+      $object->task_title = $node->task_title;
+      $object->datebegin = $node->datebegin;
+      $object->dateend = $node->dateend;
+      $object->durationunit = $node->durationunit;
+      $object->duration = $node->duration;
+
+      drupal_write_record('stormtimetracking_favorites', $object, array());
 
   }
 
@@ -379,20 +366,20 @@ function stormtimetracking_favorites_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL
       switch ($node->type) {
 
         case 'stormorganization':
-          db_query('UPDATE {stormtimetracking_favorites} SET organization_title = "%s" WHERE organization_nid = %d ', $node->title, $node->nid);
+          db_query("UPDATE {stormtimetracking_favorites} SET organization_title = '%s' WHERE organization_nid = %d ", $node->title, $node->nid);
           break;
 
         case 'stormproject':
-          db_query('UPDATE {stormtimetracking_favorites} SET project_title = "%s" WHERE project_nid = %d ', $node->title, $node->nid);
+          db_query("UPDATE {stormtimetracking_favorites} SET project_title = '%s' WHERE project_nid = %d ", $node->title, $node->nid);
           break;
 
         case 'stormtask':
-          db_query('UPDATE {stormtimetracking_favorites} SET task_title = "%s" WHERE task_nid = %d ', $node->title, $node->nid);
+          db_query("UPDATE {stormtimetracking_favorites} SET task_title = '%s' WHERE task_nid = %d ", $node->title, $node->nid);
           break;
 
       }
       if (in_array($node->type, $node_types)) {
-        db_query('UPDATE {stormtimetracking_favorites} SET datebegin = %d, dateend = %d, durationunit = "%s", duration = %d WHERE nid = %d ',
+        db_query("UPDATE {stormtimetracking_favorites} SET datebegin = %d, dateend = %d, durationunit = '%s', duration = %d WHERE nid = %d ",
         $node->datebegin, $node->dateend, $node->durationunit, $node->duration, $node->nid);
       }
 
@@ -487,4 +474,4 @@ function stormtimetracking_favorites_storm_dashboard_links() {
   );
 
   return $links;
-}
\ No newline at end of file
+}
-- 
1.7.0.4

