From 1066dcb279e26de29fd663d61957dfcd1f939f9a Mon Sep 17 00:00:00 2001 From: admin Date: Wed, 6 Sep 2006 01:55:56 +0000 Subject: --- system/drivers/DB_postgre.php | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/system/drivers/DB_postgre.php b/system/drivers/DB_postgre.php index f0be3c0b1..aa7ec7020 100644 --- a/system/drivers/DB_postgre.php +++ b/system/drivers/DB_postgre.php @@ -154,7 +154,35 @@ class CI_DB_postgre extends CI_DB { */ function insert_id() { - return pg_last_oid($this->result_id); + $v = pg_version($this->conn_id); + $v = $v['server']; + + $table = func_num_args() > 0 ? func_get_arg(0) : null; + $column = func_num_args() > 1 ? func_get_arg(1) : null; + + if ($table == null && $v >= '8.1') + { + $sql='SELECT LASTVAL() as ins_id'; + } + elseif ($table != null && $column != null && $v >= '8.0') + { + $sql = sprintf("SELECT pg_get_serial_sequence('%s','%s') as seq", $table, $column); + $query = $this->query($sql); + $row = $query->row(); + $sql = sprintf("SELECT CURRVAL('%s') as ins_id", $row->seq); + } + elseif ($table != null) + { + // seq_name passed in table parameter + $sql = sprintf("SELECT CURRVAL('%s') as ins_id", $table); + } + else + { + return pg_last_oid($this->result_id); + } + $query = $this->query($sql); + $row = $query->row(); + return $row->ins_id; } // -------------------------------------------------------------------- -- cgit v1.2.3-24-g4f1b