diff options
author | Root <development@fractureme.com> | 2012-05-26 00:52:59 +0200 |
---|---|---|
committer | Root <development@fractureme.com> | 2012-05-26 00:52:59 +0200 |
commit | 99e602d25051ed449255fe16c4aa0aadd7d05c1f (patch) | |
tree | a0a9d0cdf4e741fcff68a2ecd70c198a43b5d787 /system/database/drivers/postgre/postgre_driver.php | |
parent | 35ac46d4aad12fe723229feca403b4dee3efcc27 (diff) | |
parent | f33e2ff30b0a9c54d6e8adbe88662838b9bd525e (diff) |
Merge branch 'develop' of git://github.com/EllisLab/CodeIgniter into develop
Diffstat (limited to 'system/database/drivers/postgre/postgre_driver.php')
-rw-r--r-- | system/database/drivers/postgre/postgre_driver.php | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/system/database/drivers/postgre/postgre_driver.php b/system/database/drivers/postgre/postgre_driver.php index 0ddfd0abe..30689cc70 100644 --- a/system/database/drivers/postgre/postgre_driver.php +++ b/system/database/drivers/postgre/postgre_driver.php @@ -539,6 +539,47 @@ class CI_DB_postgre_driver extends CI_DB { // -------------------------------------------------------------------- /** + * Update_Batch statement + * + * Generates a platform-specific batch update string from the supplied data + * + * @param string the table name + * @param array the update data + * @param array the where clause + * @return string + */ + protected function _update_batch($table, $values, $index, $where = NULL) + { + $ids = array(); + foreach ($values as $key => $val) + { + $ids[] = $val[$index]; + + foreach (array_keys($val) as $field) + { + if ($field != $index) + { + $final[$field][] = 'WHEN '.$val[$index].' THEN '.$val[$field]; + } + } + } + + $cases = ''; + foreach ($final as $k => $v) + { + $cases .= $k.' = (CASE '.$k."\n" + .implode("\n", $v)."\n" + .'ELSE '.$k.' END), '; + } + + return 'UPDATE '.$table.' SET '.substr($cases, 0, -2) + .' WHERE '.(($where != '' && count($where) > 0) ? implode(' ', $where).' AND ' : '') + .$index.' IN('.implode(',', $ids).')'; + } + + // -------------------------------------------------------------------- + + /** * Delete statement * * Generates a platform-specific delete string from the supplied data |