Archived
1
0

Update to CodeIgniter 3.19

This commit is contained in:
Marcel
2018-12-29 16:16:49 +01:00
parent b036b4d36e
commit d09ee2788d
159 changed files with 2508 additions and 1910 deletions

View File

@@ -6,7 +6,7 @@
*
* This content is released under the MIT License (MIT)
*
* Copyright (c) 2014 - 2016, British Columbia Institute of Technology
* Copyright (c) 2014 - 2018, British Columbia Institute of Technology
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -29,7 +29,7 @@
* @package CodeIgniter
* @author EllisLab Dev Team
* @copyright Copyright (c) 2008 - 2014, EllisLab, Inc. (https://ellislab.com/)
* @copyright Copyright (c) 2014 - 2016, British Columbia Institute of Technology (http://bcit.ca/)
* @copyright Copyright (c) 2014 - 2018, British Columbia Institute of Technology (http://bcit.ca/)
* @license http://opensource.org/licenses/MIT MIT License
* @link https://codeigniter.com
* @since Version 1.3.0
@@ -50,7 +50,7 @@ defined('BASEPATH') OR exit('No direct script access allowed');
* @author EllisLab Dev Team
* @link https://codeigniter.com/user_guide/database/
*/
class CI_DB_odbc_driver extends CI_DB {
class CI_DB_odbc_driver extends CI_DB_driver {
/**
* Database driver
@@ -93,6 +93,22 @@ class CI_DB_odbc_driver extends CI_DB {
// --------------------------------------------------------------------
/**
* ODBC result ID resource returned from odbc_prepare()
*
* @var resource
*/
private $odbc_result;
/**
* Values to use with odbc_execute() for prepared statements
*
* @var array
*/
private $binds = array();
// --------------------------------------------------------------------
/**
* Class constructor
*
@@ -127,6 +143,74 @@ class CI_DB_odbc_driver extends CI_DB {
// --------------------------------------------------------------------
/**
* Compile Bindings
*
* @param string $sql SQL statement
* @param array $binds An array of values to bind
* @return string
*/
public function compile_binds($sql, $binds)
{
if (empty($binds) OR empty($this->bind_marker) OR strpos($sql, $this->bind_marker) === FALSE)
{
return $sql;
}
elseif ( ! is_array($binds))
{
$binds = array($binds);
$bind_count = 1;
}
else
{
// Make sure we're using numeric keys
$binds = array_values($binds);
$bind_count = count($binds);
}
// We'll need the marker length later
$ml = strlen($this->bind_marker);
// Make sure not to replace a chunk inside a string that happens to match the bind marker
if ($c = preg_match_all("/'[^']*'|\"[^\"]*\"/i", $sql, $matches))
{
$c = preg_match_all('/'.preg_quote($this->bind_marker, '/').'/i',
str_replace($matches[0],
str_replace($this->bind_marker, str_repeat(' ', $ml), $matches[0]),
$sql, $c),
$matches, PREG_OFFSET_CAPTURE);
// Bind values' count must match the count of markers in the query
if ($bind_count !== $c)
{
return $sql;
}
}
elseif (($c = preg_match_all('/'.preg_quote($this->bind_marker, '/').'/i', $sql, $matches, PREG_OFFSET_CAPTURE)) !== $bind_count)
{
return $sql;
}
if ($this->bind_marker !== '?')
{
do
{
$c--;
$sql = substr_replace($sql, '?', $matches[0][$c][1], $ml);
}
while ($c !== 0);
}
if (FALSE !== ($this->odbc_result = odbc_prepare($this->conn_id, $sql)))
{
$this->binds = array_values($binds);
}
return $sql;
}
// --------------------------------------------------------------------
/**
* Execute the query
*
@@ -135,7 +219,25 @@ class CI_DB_odbc_driver extends CI_DB {
*/
protected function _execute($sql)
{
return odbc_exec($this->conn_id, $sql);
if ( ! isset($this->odbc_result))
{
return odbc_exec($this->conn_id, $sql);
}
elseif ($this->odbc_result === FALSE)
{
return FALSE;
}
if (TRUE === ($success = odbc_execute($this->odbc_result, $this->binds)))
{
// For queries that return result sets, return the result_id resource on success
$this->is_write_type($sql) OR $success = $this->odbc_result;
}
$this->odbc_result = NULL;
$this->binds = array();
return $success;
}
// --------------------------------------------------------------------
@@ -196,7 +298,7 @@ class CI_DB_odbc_driver extends CI_DB {
*/
public function is_write_type($sql)
{
if (preg_match('#^(INSERT|UPDATE).*RETURNING\s.+(\,\s?.+)*$#i', $sql))
if (preg_match('#^(INSERT|UPDATE).*RETURNING\s.+(\,\s?.+)*$#is', $sql))
{
return FALSE;
}
@@ -207,14 +309,14 @@ class CI_DB_odbc_driver extends CI_DB {
// --------------------------------------------------------------------
/**
* Platform-dependant string escape
* Platform-dependent string escape
*
* @param string
* @return string
*/
protected function _escape_str($str)
{
return remove_invisible_characters($str);
$this->display_error('db_unsupported_feature');
}
// --------------------------------------------------------------------
@@ -238,7 +340,7 @@ class CI_DB_odbc_driver extends CI_DB {
*/
public function insert_id()
{
return ($this->db->db_debug) ? $this->db->display_error('db_unsupported_feature') : FALSE;
return ($this->db_debug) ? $this->display_error('db_unsupported_feature') : FALSE;
}
// --------------------------------------------------------------------
@@ -300,7 +402,7 @@ class CI_DB_odbc_driver extends CI_DB {
* Error
*
* Returns an array containing code and message of the last
* database error that has occured.
* database error that has occurred.
*
* @return array
*/
@@ -311,58 +413,6 @@ class CI_DB_odbc_driver extends CI_DB {
// --------------------------------------------------------------------
/**
* Update statement
*
* Generates a platform-specific update string from the supplied data
*
* @param string $table
* @param array $values
* @return string
*/
protected function _update($table, $values)
{
$this->qb_limit = FALSE;
$this->qb_orderby = array();
return parent::_update($table, $values);
}
// --------------------------------------------------------------------
/**
* Truncate statement
*
* Generates a platform-specific truncate string from the supplied data
*
* If the database does not support the TRUNCATE statement,
* then this method maps to 'DELETE FROM table'
*
* @param string $table
* @return string
*/
protected function _truncate($table)
{
return 'DELETE FROM '.$table;
}
// --------------------------------------------------------------------
/**
* Delete statement
*
* Generates a platform-specific delete string from the supplied data
*
* @param string $table
* @return string
*/
protected function _delete($table)
{
$this->qb_limit = FALSE;
return parent::_delete($table);
}
// --------------------------------------------------------------------
/**
* Close DB Connection
*
@@ -372,5 +422,4 @@ class CI_DB_odbc_driver extends CI_DB {
{
odbc_close($this->conn_id);
}
}