mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-27 21:58:52 +00:00
thankfully, we never used this feature
git-svn-id: file:///svn/phpbb/trunk@7857 89ea8834-ac86-4346-8a33-228a782c2dd0
This commit is contained in:
parent
6e6636fbd2
commit
020debce66
2 changed files with 133 additions and 8 deletions
|
@ -196,6 +196,7 @@ p a {
|
|||
<li>[Fix] Properly alter PostgreSQL tables</li>
|
||||
<li>[Fix] Properly cache template files that were stored in the database (Bug #12675)</li>
|
||||
<li>[Fix] Do not count the deletion of an unapproved topic as a decrease in normally viewable posts (Bug #13167)</li>
|
||||
<li>[Fix] Allow column_exists() to return true if the column exists but no data is in the table</li>
|
||||
|
||||
</ul>
|
||||
|
||||
|
|
|
@ -859,18 +859,142 @@ function column_exists($dbms, $table, $column_name)
|
|||
{
|
||||
global $db;
|
||||
|
||||
$db->sql_return_on_error(true);
|
||||
switch ($dbms)
|
||||
{
|
||||
case 'mysql_40':
|
||||
case 'mysql_41':
|
||||
$sql = "SHOW COLUMNS
|
||||
FROM $table";
|
||||
$result = $db->sql_query($sql);
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
// lower case just in case
|
||||
if (strtolower($row['Field']) == $column_name)
|
||||
{
|
||||
$db->sql_freeresult($result);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
return false;
|
||||
break;
|
||||
|
||||
$sql = "SELECT $column_name FROM $table";
|
||||
$result = $db->sql_query_limit($sql, 1);
|
||||
// PostgreSQL has a way of doing this in a much simpler way but would
|
||||
// not allow us to support all versions of PostgreSQL
|
||||
case 'postgres':
|
||||
$sql = "SELECT a.attname
|
||||
FROM pg_class c, pg_attribute a
|
||||
WHERE c.relname = '{$table}'
|
||||
AND a.attnum > 0
|
||||
AND a.attrelid = c.oid";
|
||||
$result = $db->sql_query($sql);
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
// lower case just in case
|
||||
if (strtolower($row['attname']) == $column_name)
|
||||
{
|
||||
$db->sql_freeresult($result);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
return false;
|
||||
break;
|
||||
|
||||
// same deal with PostgreSQL, we must perform more complex operations than
|
||||
// we technically could
|
||||
case 'mssql':
|
||||
$sql = "SELECT c.name
|
||||
FROM syscolumns c
|
||||
LEFT JOIN sysobjects o (ON c.id = o.id)
|
||||
WHERE o.name = '{$table}'";
|
||||
$result = $db->sql_query($sql);
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
// lower case just in case
|
||||
if (strtolower($row['name']) == $column_name)
|
||||
{
|
||||
$db->sql_freeresult($result);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
return false;
|
||||
break;
|
||||
|
||||
case 'oracle':
|
||||
$sql = "SELECT column_name
|
||||
FROM user_tab_columns
|
||||
WHERE table_name = '{$table}'";
|
||||
$result = $db->sql_query($sql);
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
// lower case just in case
|
||||
if (strtolower($row['column_name']) == $column_name)
|
||||
{
|
||||
$db->sql_freeresult($result);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
return false;
|
||||
break;
|
||||
|
||||
case 'firebird':
|
||||
$sql = "SELECT RDB$FIELD_NAME as FNAME
|
||||
FROM RDB$RELATION_FIELDS
|
||||
WHERE RDB$RELATION_NAME = '{$table}'";
|
||||
$result = $db->sql_query($sql);
|
||||
while ($row = $db->sql_fetchrow($result))
|
||||
{
|
||||
// lower case just in case
|
||||
if (strtolower($row['fname']) == $column_name)
|
||||
{
|
||||
$db->sql_freeresult($result);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
$db->sql_freeresult($result);
|
||||
return false;
|
||||
break;
|
||||
|
||||
// ugh, SQLite
|
||||
case 'sqlite':
|
||||
$sql = "SELECT sql
|
||||
FROM sqlite_master
|
||||
WHERE type = 'table'
|
||||
AND name = '{$table}'";
|
||||
$result = $db->sql_query($sql);
|
||||
$row = $db->sql_fetchrow($result);
|
||||
$db->sql_freeresult($result);
|
||||
|
||||
$error = ($db->sql_error_triggered) ? true : false;
|
||||
if (!$result)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
$db->sql_return_on_error(false);
|
||||
preg_match('#\((.*)\)#s', $row['sql'], $matches);
|
||||
|
||||
return (!$error) ? true : false;
|
||||
$cols = trim($matches[1]);
|
||||
$col_array = preg_split('/,(?![\s\w]+\))/m', $cols);
|
||||
$column_list = array();
|
||||
|
||||
foreach ($col_array as $declaration)
|
||||
{
|
||||
$entities = preg_split('#\s+#', trim($declaration));
|
||||
if ($entities[0] == 'PRIMARY')
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (strtolower($entities[0]) == $column_name)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Add table
Reference in a new issue