aboutsummaryrefslogtreecommitdiffstats
path: root/phpBB/install/database_update.php
diff options
context:
space:
mode:
authorDavid M <davidmj@users.sourceforge.net>2007-07-10 03:54:26 +0000
committerDavid M <davidmj@users.sourceforge.net>2007-07-10 03:54:26 +0000
commit020debce6625017ed7509c444165193c3ff60ccc (patch)
tree0ddea13ae8430d6057d6c3742c0ff5fe6f70413d /phpBB/install/database_update.php
parent6e6636fbd2df117d47515f5e38d3881fa9f139e7 (diff)
downloadforums-020debce6625017ed7509c444165193c3ff60ccc.tar
forums-020debce6625017ed7509c444165193c3ff60ccc.tar.gz
forums-020debce6625017ed7509c444165193c3ff60ccc.tar.bz2
forums-020debce6625017ed7509c444165193c3ff60ccc.tar.xz
forums-020debce6625017ed7509c444165193c3ff60ccc.zip
thankfully, we never used this feature
git-svn-id: file:///svn/phpbb/trunk@7857 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/install/database_update.php')
-rw-r--r--phpBB/install/database_update.php140
1 files changed, 132 insertions, 8 deletions
diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php
index 33e4d406e8..ab7d104cf1 100644
--- a/phpBB/install/database_update.php
+++ b/phpBB/install/database_update.php
@@ -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);
- $row = $db->sql_fetchrow($result);
- $db->sql_freeresult($result);
+ // 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;
- $error = ($db->sql_error_triggered) ? true : false;
+ // 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;
- $db->sql_return_on_error(false);
+ 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;
- return (!$error) ? true : false;
+ 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);
+
+ if (!$result)
+ {
+ return false;
+ }
+
+ preg_match('#\((.*)\)#s', $row['sql'], $matches);
+
+ $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;
+ }
}
/**