mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-29 06:38:52 +00:00
git-svn-id: file:///svn/phpbb/trunk@7835 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
93f8e8c293
commit
d3468832bb
3 changed files with 13 additions and 12 deletions
|
@ -220,6 +220,7 @@ p a {
|
||||||
<li>[Fix] Added proper unicode support to ban reasons (Bug #12947)</li>
|
<li>[Fix] Added proper unicode support to ban reasons (Bug #12947)</li>
|
||||||
<li>[Fix] The forum/topic sync code now recognizes other ways that the latest post in a topic can be expressed (Bug #12947) - patch provided by APTX</li>
|
<li>[Fix] The forum/topic sync code now recognizes other ways that the latest post in a topic can be expressed (Bug #12947) - patch provided by APTX</li>
|
||||||
<li>[Fix] Topic deletion via the user post deletion mechanism did not take into account statistics for forums that hold shadow topics (Bug #12981)</li>
|
<li>[Fix] Topic deletion via the user post deletion mechanism did not take into account statistics for forums that hold shadow topics (Bug #12981)</li>
|
||||||
|
<li>[Fix] Allow for negative and decimal numbers to be in transposed queries in the Oracle and Firebird DBAL (Bug #13033)</li>
|
||||||
|
|
||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ class dbal_firebird extends dbal
|
||||||
{
|
{
|
||||||
if (strlen($regs[3]) > 32767)
|
if (strlen($regs[3]) > 32767)
|
||||||
{
|
{
|
||||||
preg_match_all('/\'(?:[^\']++|\'\')*+\'|\\d+/', $regs[3], $vals, PREG_PATTERN_ORDER);
|
preg_match_all('/\'(?:[^\']++|\'\')*+\'|[\d-.]+/', $regs[3], $vals, PREG_PATTERN_ORDER);
|
||||||
|
|
||||||
$inserts = $vals[0];
|
$inserts = $vals[0];
|
||||||
unset($vals);
|
unset($vals);
|
||||||
|
@ -135,13 +135,13 @@ class dbal_firebird extends dbal
|
||||||
$query = $regs[1] . '(' . $regs[2] . ') VALUES (' . implode(', ', $inserts) . ')';
|
$query = $regs[1] . '(' . $regs[2] . ') VALUES (' . implode(', ', $inserts) . ')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (preg_match('/^(UPDATE ([\\w_]++)\\s+SET )([\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|\\d+)(?:,\\s*[\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|\\d+))*+)\\s+(WHERE.*)$/s', $query, $data))
|
else if (preg_match('/^(UPDATE ([\\w_]++)\\s+SET )([\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|\\d+)(?:,\\s*[\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+))*+)\\s+(WHERE.*)$/s', $query, $data))
|
||||||
{
|
{
|
||||||
if (strlen($data[3]) > 32767)
|
if (strlen($data[3]) > 32767)
|
||||||
{
|
{
|
||||||
$update = $data[1];
|
$update = $data[1];
|
||||||
$where = $data[4];
|
$where = $data[4];
|
||||||
preg_match_all('/(\\w++)\\s*=\\s*(\'(?:[^\']++|\'\')*+\'|\\d++)/', $data[3], $temp, PREG_SET_ORDER);
|
preg_match_all('/(\\w++)\\s*=\\s*(\'(?:[^\']++|\'\')*+\'|[\d-.]++)/', $data[3], $temp, PREG_SET_ORDER);
|
||||||
unset($data);
|
unset($data);
|
||||||
|
|
||||||
$cols = array();
|
$cols = array();
|
||||||
|
@ -164,7 +164,7 @@ class dbal_firebird extends dbal
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!function_exists('ibase_affected_rows') && (preg_match('/^UPDATE ([\w_]++)\s+SET [\w_]++\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|\d+)(?:,\s*[\w_]++\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|\d+))*+\s+(WHERE.*)$/s', $query, $regs) || preg_match('/^DELETE FROM ([\w_]++)\s*WHERE\s*(.*)$/s', $query, $regs)))
|
if (!function_exists('ibase_affected_rows') && (preg_match('/^UPDATE ([\w_]++)\s+SET [\w_]++\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+)(?:,\s*[\w_]++\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+))*+\s+(WHERE.*)$/s', $query, $regs) || preg_match('/^DELETE FROM ([\w_]++)\s*WHERE\s*(.*)$/s', $query, $regs)))
|
||||||
{
|
{
|
||||||
$affected_sql = 'SELECT COUNT(*) as num_rows_affected FROM ' . $regs[1] . ' ' . $regs[2];
|
$affected_sql = 'SELECT COUNT(*) as num_rows_affected FROM ' . $regs[1] . ' ' . $regs[2];
|
||||||
|
|
||||||
|
|
|
@ -115,7 +115,7 @@ class dbal_oracle extends dbal
|
||||||
*/
|
*/
|
||||||
function _rewrite_where($where_clause)
|
function _rewrite_where($where_clause)
|
||||||
{
|
{
|
||||||
preg_match_all('/\s*(AND|OR)?\s*([\w_.]++)\s*(?:(=|<>)\s*((?>\'(?>[^\']++|\'\')*+\'|\d+))|((NOT )?IN\s*\((?>\'(?>[^\']++|\'\')*+\',? ?|\d+,? ?)*+\)))/', $where_clause, $result, PREG_SET_ORDER);
|
preg_match_all('/\s*(AND|OR)?\s*([\w_.]++)\s*(?:(=|<>)\s*((?>\'(?>[^\']++|\'\')*+\'|[\d-.]+))|((NOT )?IN\s*\((?>\'(?>[^\']++|\'\')*+\',? ?|[\d-.]+,? ?)*+\)))/', $where_clause, $result, PREG_SET_ORDER);
|
||||||
$out = '';
|
$out = '';
|
||||||
foreach ($result as $val)
|
foreach ($result as $val)
|
||||||
{
|
{
|
||||||
|
@ -143,7 +143,7 @@ class dbal_oracle extends dbal
|
||||||
$in_clause = array();
|
$in_clause = array();
|
||||||
$sub_exp = substr($val[5], strpos($val[5], '(') + 1, -1);
|
$sub_exp = substr($val[5], strpos($val[5], '(') + 1, -1);
|
||||||
$extra = false;
|
$extra = false;
|
||||||
preg_match_all('/\'(?>[^\']++|\'\')*+\'|\d++/', $sub_exp, $sub_vals, PREG_PATTERN_ORDER);
|
preg_match_all('/\'(?>[^\']++|\'\')*+\'|[\d-.]++/', $sub_exp, $sub_vals, PREG_PATTERN_ORDER);
|
||||||
$i = 0;
|
$i = 0;
|
||||||
foreach ($sub_vals[0] as $sub_val)
|
foreach ($sub_vals[0] as $sub_val)
|
||||||
{
|
{
|
||||||
|
@ -239,7 +239,7 @@ class dbal_oracle extends dbal
|
||||||
if (strlen($regs[3]) > 4000)
|
if (strlen($regs[3]) > 4000)
|
||||||
{
|
{
|
||||||
$cols = explode(', ', $regs[2]);
|
$cols = explode(', ', $regs[2]);
|
||||||
preg_match_all('/\'(?:[^\']++|\'\')*+\'|\\d+/', $regs[3], $vals, PREG_PATTERN_ORDER);
|
preg_match_all('/\'(?:[^\']++|\'\')*+\'|\[\d-.]+/', $regs[3], $vals, PREG_PATTERN_ORDER);
|
||||||
|
|
||||||
$inserts = $vals[0];
|
$inserts = $vals[0];
|
||||||
unset($vals);
|
unset($vals);
|
||||||
|
@ -256,13 +256,13 @@ class dbal_oracle extends dbal
|
||||||
$query = $regs[1] . '(' . $regs[2] . ') VALUES (' . implode(', ', $inserts) . ')';
|
$query = $regs[1] . '(' . $regs[2] . ') VALUES (' . implode(', ', $inserts) . ')';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (preg_match_all('/^(UPDATE [\\w_]++\\s+SET )([\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|\\d+)(?:,\\s*[\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|\\d+))*+)\\s+(WHERE.*)$/s', $query, $data, PREG_SET_ORDER))
|
else if (preg_match_all('/^(UPDATE [\\w_]++\\s+SET )([\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+)(?:,\\s*[\\w_]++\\s*=\\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]+))*+)\\s+(WHERE.*)$/s', $query, $data, PREG_SET_ORDER))
|
||||||
{
|
{
|
||||||
if (strlen($data[0][2]) > 4000)
|
if (strlen($data[0][2]) > 4000)
|
||||||
{
|
{
|
||||||
$update = $data[0][1];
|
$update = $data[0][1];
|
||||||
$where = $data[0][3];
|
$where = $data[0][3];
|
||||||
preg_match_all('/([\\w_]++)\\s*=\\s*(\'(?:[^\']++|\'\')*+\'|\\d++)/', $data[0][2], $temp, PREG_SET_ORDER);
|
preg_match_all('/([\\w_]++)\\s*=\\s*(\'(?:[^\']++|\'\')*+\'|[\d-.]++)/', $data[0][2], $temp, PREG_SET_ORDER);
|
||||||
unset($data);
|
unset($data);
|
||||||
|
|
||||||
$cols = array();
|
$cols = array();
|
||||||
|
@ -288,7 +288,7 @@ class dbal_oracle extends dbal
|
||||||
switch (substr($query, 0, 6))
|
switch (substr($query, 0, 6))
|
||||||
{
|
{
|
||||||
case 'DELETE':
|
case 'DELETE':
|
||||||
if (preg_match('/^(DELETE FROM [\w_]++ WHERE)((?:\s*(?:AND|OR)?\s*[\w_]+\s*(?:(?:=|<>)\s*(?>\'(?>[^\']++|\'\')*+\'|\d+)|(?:NOT )?IN\s*\((?>\'(?>[^\']++|\'\')*+\',? ?|\d+,? ?)*+\)))*+)$/', $query, $regs))
|
if (preg_match('/^(DELETE FROM [\w_]++ WHERE)((?:\s*(?:AND|OR)?\s*[\w_]+\s*(?:(?:=|<>)\s*(?>\'(?>[^\']++|\'\')*+\'|[\d-.]+)|(?:NOT )?IN\s*\((?>\'(?>[^\']++|\'\')*+\',? ?|[\d-.]+,? ?)*+\)))*+)$/', $query, $regs))
|
||||||
{
|
{
|
||||||
$query = $regs[1] . $this->_rewrite_where($regs[2]);
|
$query = $regs[1] . $this->_rewrite_where($regs[2]);
|
||||||
unset($regs);
|
unset($regs);
|
||||||
|
@ -296,7 +296,7 @@ class dbal_oracle extends dbal
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'UPDATE':
|
case 'UPDATE':
|
||||||
if (preg_match('/^(UPDATE [\\w_]++\\s+SET [\\w_]+\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|\\d++|:\w++)(?:, [\\w_]+\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|\\d++|:\w++))*+\\s+WHERE)(.*)$/s', $query, $regs))
|
if (preg_match('/^(UPDATE [\\w_]++\\s+SET [\\w_]+\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]++|:\w++)(?:, [\\w_]+\s*=\s*(?:\'(?:[^\']++|\'\')*+\'|[\d-.]++|:\w++))*+\\s+WHERE)(.*)$/s', $query, $regs))
|
||||||
{
|
{
|
||||||
$query = $regs[1] . $this->_rewrite_where($regs[2]);
|
$query = $regs[1] . $this->_rewrite_where($regs[2]);
|
||||||
unset($regs);
|
unset($regs);
|
||||||
|
@ -304,7 +304,7 @@ class dbal_oracle extends dbal
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'SELECT':
|
case 'SELECT':
|
||||||
$query = preg_replace_callback('/([\w_.]++)\s*(?:(=|<>)\s*(?>\'(?>[^\']++|\'\')*+\'|\d++|([\w_.]++))|(?:NOT )?IN\s*\((?>\'(?>[^\']++|\'\')*+\',? ?|\d++,? ?)*+\))/', array($this, '_rewrite_col_compare'), $query);
|
$query = preg_replace_callback('/([\w_.]++)\s*(?:(=|<>)\s*(?>\'(?>[^\']++|\'\')*+\'|[\d-.]++|([\w_.]++))|(?:NOT )?IN\s*\((?>\'(?>[^\']++|\'\')*+\',? ?|[\d-.]++,? ?)*+\))/', array($this, '_rewrite_col_compare'), $query);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue