SF.net SVN: postfixadmin:[945] trunk/upgrade.php
Brought to you by:
christian_boltz,
gingerdog
|
From: <chr...@us...> - 2011-02-06 17:42:53
|
Revision: 945
http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=945&view=rev
Author: christian_boltz
Date: 2011-02-06 17:42:47 +0000 (Sun, 06 Feb 2011)
Log Message:
-----------
upgrade.php: add "modified" column to vacation table, various fixes and new helper functions
- fix _pgsql_field_exists and _mysql_field_exists to work with
non-default table names
- new function _db_field_exists as database-independent wrapper for
_*_field_exists
- new function _db_add_field to add a field to a table
- new function printdebug for debug output (grey text)
- define {DATECURRENT} for timestamp fields (avoids lots of duplication)
-> @GingerDog: please check if the PostgreSQL statement is correct!
- upgrade_945: add a 'modified' column to the vacation table
- various small changes (whitespace, comments, TODO notes etc.
Modified Paths:
--------------
trunk/upgrade.php
Modified: trunk/upgrade.php
===================================================================
--- trunk/upgrade.php 2011-02-05 10:54:59 UTC (rev 944)
+++ trunk/upgrade.php 2011-02-06 17:42:47 UTC (rev 945)
@@ -25,6 +25,7 @@
}
function _pgsql_field_exists($table, $field) {
+ $table = table_by_key($table);
$sql = '
SELECT
a.attname,
@@ -51,15 +52,45 @@
}
function _mysql_field_exists($table, $field) {
+ $table = table_by_key($table);
$sql = "SHOW COLUMNS FROM $table LIKE '$field'";
$r = db_query($sql);
$row = db_row($r['result']);
+
if($row) {
return true;
}
return false;
}
+function _db_field_exists($table, $field) {
+ global $CONF;
+ if($CONF['database_type'] == 'pgsql') {
+ return _pgsql_field_exists($table, $field);
+ } else {
+ return _mysql_field_exists($table, $field);
+ }
+}
+
+function _db_add_field($table, $field, $fieldtype, $after) {
+ global $CONF;
+
+ $query = "ALTER TABLE " . table_by_key($table) . " ADD COLUMN $field $fieldtype";
+ if($CONF['database_type'] != 'pgsql') {
+ $query .= " AFTER $after "; # PgSQL does not support to specify where to add the column, MySQL does
+ }
+
+ if(! _db_field_exists($table, $field)) {
+ $result = db_query_parsed($query);
+ } else {
+ printdebug ("field already exists: $table.$field");
+ }
+}
+
+function printdebug($text) {
+ if (safeget('debug') != "") print "<p style='color:#999'>$text</p>";
+}
+
$table = table_by_key('config');
if($CONF['database_type'] == 'pgsql') {
// check if table already exists, if so, don't recreate it
@@ -173,7 +204,8 @@
'{MYISAM}' => 'ENGINE=MyISAM',
'{INNODB}' => 'ENGINE=InnoDB',
'{BIGINT}' => 'bigint',
- );
+ '{DATECURRENT}' => 'timestamp NOT NULL default CURRENT_TIMESTAMP',
+ );
$sql = "$sql $attach_mysql";
} elseif($CONF['database_type'] == 'pgsql') {
@@ -194,7 +226,8 @@
'int(10)' => 'int',
'int(11)' => 'int',
'int(4)' => 'int',
- );
+ '{DATECURRENT}' => 'timestamp with time zone default now()',
+ );
} else {
echo "Sorry, unsupported database type " . $conf['database_type'];
@@ -205,8 +238,9 @@
$replace['{BOOL_FALSE}'] = db_get_boolean(False);
$query = trim(str_replace(array_keys($replace), $replace, $sql));
+
if (safeget('debug') != "") {
- print "<p style='color:#999'>$query";
+ printdebug ($query);
}
$result = db_query($query, $ignore_errors);
if (safeget('debug') != "") {
@@ -909,7 +943,7 @@
/**
* Create alias_domain table - MySQL
*/
-# function upgrade_362_mysql() { # renamed to _438 to make sure it runs after an upgrade from 2.2.x
+# function upgrade_362_mysql() # renamed to _438 to make sure it runs after an upgrade from 2.2.x
function upgrade_438_mysql() {
# Table structure for table alias_domain
#
@@ -931,7 +965,7 @@
/**
* Create alias_domain table - PgSQL
*/
-# function upgrade_362_pgsql() { # renamed to _438 to make sure it runs after an upgrade from 2.2.x
+# function upgrade_362_pgsql() # renamed to _438 to make sure it runs after an upgrade from 2.2.x
function upgrade_438_pgsql() {
# Table structure for table alias_domain
$table_alias_domain = table_by_key('alias_domain');
@@ -1091,6 +1125,7 @@
}
function upgrade_727_mysql() {
+# TODO: do the same for PostgreSQL - if possible without different queries
$table_vacation = table_by_key('vacation');
if(!_mysql_field_exists($table_vacation, 'activefrom')) {
db_query_parsed("ALTER TABLE $table_vacation add activefrom datetime default NULL");
@@ -1099,6 +1134,7 @@
db_query_parsed("ALTER TABLE $table_vacation add activeuntil datetime default NULL");
}
+# TODO: the following tables are not used - remove them from upgrade_727_mysql() ???
$table_client_access = table_by_key('client_access');
db_query_parsed("
CREATE TABLE IF NOT EXISTS $table_client_access (
@@ -1233,3 +1269,20 @@
FOR EACH ROW EXECUTE PROCEDURE merge_quota2();
");
}
+
+function upgrade_945() {
+ _db_add_field('vacation', 'modified', '{DATECURRENT}', 'created');
+}
+
+
+# TODO MySQL:
+# - various varchar fields do not have a default value
+# https://sourceforge.net/projects/postfixadmin/forums/forum/676076/topic/3419725
+# - change default of all timestamp fields to {DATECURRENT} (CURRENT_TIMESTAMP}
+# https://sourceforge.net/tracker/?func=detail&aid=1699218&group_id=191583&atid=937964
+#
+# TODO all:
+# drop function upgrade_727_mysql() (won't run for upgrades from 2.3.x) and
+# - replace it with a function that works for all databases (_add_field)
+# - ignore the unused tables (client_access etc.)
+
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|