diff options
Diffstat (limited to 'system/drivers/DB_oci8.php')
-rw-r--r-- | system/drivers/DB_oci8.php | 86 |
1 files changed, 83 insertions, 3 deletions
diff --git a/system/drivers/DB_oci8.php b/system/drivers/DB_oci8.php index 06426dcac..2f936da12 100644 --- a/system/drivers/DB_oci8.php +++ b/system/drivers/DB_oci8.php @@ -43,6 +43,9 @@ class CI_DB_oci8 extends CI_DB { + // Set "auto commit" by default + var $_commit = OCI_COMMIT_ON_SUCCESS; + // need to track statement id and cursor id var $stmt_id; var $curs_id; @@ -50,7 +53,7 @@ class CI_DB_oci8 extends CI_DB { // if we use a limit, we will add a field that will // throw off num_fields later var $limit_used; - + /** * Non-persistent database connection * @@ -97,7 +100,7 @@ class CI_DB_oci8 extends CI_DB { * @param string an SQL query * @return resource */ - function execute($sql) + function _execute($sql) { // oracle must parse the query before it // is run, all of the actions with @@ -105,7 +108,7 @@ class CI_DB_oci8 extends CI_DB { // returned by ociparse $this->_set_stmt_id($sql); ocisetprefetch($this->stmt_id, 1000); - return @ociexecute($this->stmt_id); + return @ociexecute($this->stmt_id, $this->_commit); } /** @@ -234,6 +237,83 @@ class CI_DB_oci8 extends CI_DB { } } + // -------------------------------------------------------------------- + + /** + * Begin Transaction + * + * @access public + * @return bool + */ + function trans_begin() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $this->_commit = OCI_DEFAULT; + return TRUE; + } + + // -------------------------------------------------------------------- + + /** + * Commit Transaction + * + * @access public + * @return bool + */ + function trans_commit() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $ret = OCIcommit($this->conn_id); + $this->_commit = OCI_COMMIT_ON_SUCCESS; + return $ret; + } + + // -------------------------------------------------------------------- + + /** + * Rollback Transaction + * + * @access public + * @return bool + */ + function trans_rollback() + { + if ( ! $this->trans_enabled) + { + return TRUE; + } + + // When transactions are nested we only begin/commit/rollback the outermost ones + if ($this->_trans_depth > 0) + { + return TRUE; + } + + $ret = OCIrollback($this->conn_id); + $this->_commit = OCI_COMMIT_ON_SUCCESS; + return $ret; + } + // -------------------------------------------------------------------- /** |