SF.net SVN: postfixadmin: [271] trunk/upgrade.php
Brought to you by:
christian_boltz,
gingerdog
From: <Gin...@us...> - 2007-12-17 07:02:41
|
Revision: 271 http://postfixadmin.svn.sourceforge.net/postfixadmin/?rev=271&view=rev Author: GingerDog Date: 2007-12-16 23:02:45 -0800 (Sun, 16 Dec 2007) Log Message: ----------- upgrade.php: implemented some of the postgresql functions; have not tested it yet though Modified Paths: -------------- trunk/upgrade.php Modified: trunk/upgrade.php =================================================================== --- trunk/upgrade.php 2007-12-17 07:01:50 UTC (rev 270) +++ trunk/upgrade.php 2007-12-17 07:02:45 UTC (rev 271) @@ -101,20 +101,20 @@ $sql = "$sql $attach_mysql"; } elseif($CONF['database_type'] == 'pgsql') { - static $replace = array( + $replace = array( '{AUTOINCREMENT}' => 'SERIAL', '{PRIMARY}' => 'primary key', '{UNSIGNED}' => '', '{FULLTEXT}' => '', '{BOOLEAN}' => 'BOOLEAN NOT NULL', '{UTF-8}' => '', # TODO: UTF-8 is simply ignored. - '{LATIN1}' => '', # TODO: same for latin1 - '{IF_NOT_EXISTS}' => 'IF NOT EXISTS', # TODO: does this work with PgSQL? - '{RENAME_COLUMN}' => 'CHANGE COLUMN', # TODO: probably wrong - 'int(1)' => 'int2', - 'int(10)' => 'int4', - 'int(11)' => 'int4', - 'int(4)' => 'int4', + '{LATIN1}' => '', # TODO: same for latin1 + '{IF_NOT_EXISTS}' => '', # TODO: does this work with PgSQL? NO + '{RENAME_COLUMN}' => 'ALTER COLUMN', # PgSQL : ALTER TABLE x RENAME x TO y + 'int(1)' => 'int', + 'int(10)' => 'int', + 'int(11)' => 'int', + 'int(4)' => 'int', ); } else { @@ -141,7 +141,7 @@ if ($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli' ) { return "ALTER TABLE $table DROP INDEX $index"; } elseif($CONF['database_type'] == 'pgsql') { - return "DROP INDEX $index"; # TODO: on which table?! + return "DROP INDEX $index"; # Index names are unique with a DB for PostgreSQL } else { echo "Sorry, unsupported database type " . $conf['database_type']; exit; @@ -160,15 +160,23 @@ echo "upgrade_1"; } -function upgrade_2() { +function upgrade_2_mysql() { # upgrade pre-2.1 database # from TABLE_BACKUP_MX.TXT $table_domain = table_by_key ('domain'); $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN transport VARCHAR(255) AFTER maxquota;", TRUE); + // don't think PGSQL supports 'AFTER transport' $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN backupmx {BOOLEAN} DEFAULT {BOOL_FALSE} AFTER transport;", TRUE); } -function upgrade_3() { +function upgrade_2_pgsql() { + $table_domain = table_by_key ('domain'); + $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN transport VARCHAR(255)", TRUE); + $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN backupmx BOOLEAN DEFAULT false", TRUE); + +} + +function upgrade_3_mysql() { # upgrade pre-2.1 database # from TABLE_CHANGES.TXT $table_admin = table_by_key ('admin'); @@ -177,6 +185,8 @@ $table_mailbox = table_by_key ('mailbox'); $table_vacation = table_by_key ('vacation'); + // these will not work on PostgreSQL; syntax is : + // ALTER TABLE foo RENAME f1 TO f2 $all_sql = split("\n", trim(" ALTER TABLE $table_admin {RENAME_COLUMN} create_date created DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL; ALTER TABLE $table_admin {RENAME_COLUMN} change_date modified DATETIME DEFAULT '0000-00-00 00:00:00' NOT NULL; @@ -213,76 +223,66 @@ function upgrade_4_pgsql() { # PgSQL only # changes between 2.1 and moving to sourceforge + $table_domain = table_by_key('domain'); + $table_admin = table_by_key('admin'); + $table_alias = table_by_key('alias'); + $table_domain_admins = table_by_key('domain_admins'); + $table_log = table_by_key('log'); + $table_mailbox = table_by_key('mailbox'); + $table_vacation = table_by_key('vacation'); -/* TODO + $result = db_query_parsed("ALTER TABLE $table_domain ADD COLUMN quota int NOT NULL default '0'"); -Changes in DATABASE_PGSQL.TXT: (in diff format - "-" means removed, "+" means added) + $result = db_query_parsed("ALTER TABLE $table_domain ALTER COLUMN domain DROP DEFAULT"); + $result = db_query_parsed("CREATE INDEX domain_domain_active ON domain(domain,active)"); -TABLE domain -- domain character varying(255) NOT NULL default '', -+ domain character varying(255) NOT NULL, -+ quota integer NOT NULL default 0, + $result = db_query_parsed("ALTER TABLE $table_admin ALTER COLUMN domain DROP DEFAULT"); + $result = db_query_parsed("ALTER TABLE $table_alias ALTER COLUMN address DROP DEFAULT"); + $result = db_query_parsed("ALTER TABLE $table_alias ALTER COLUMN domain DROP DEFAULT"); + $result = db_query_parsed("CREATE INDEX alias_address_active ON alias(address,active)"); -+CREATE INDEX domain_domain_active ON domain(domain,active); + $result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN username DROP DEFAULT"); + $result = db_query_parsed("ALTER TABLE $table_domain_admins ALTER COLUMN domain DROP DEFAULT"); -TABLE "admin" -- "username" character varying(255) NOT NULL default '', -+ "username" character varying(255) NOT NULL, + $result = db_query_parsed("BEGIN; + ALTER TABLE $table_log RENAME COLUMN data TO data_old; + ALTER TABLE $table_log ADD COLUMN data TYPE text NOT NULL default ''; + UPDATE $table_log SET data = CAST(data_old AS text); + ALTER TABLE $table_log DROP COLUMN data_old; + COMMIT;"); - -TABLE alias -- address character varying(255) NOT NULL default '', -+ address character varying(255) NOT NULL, -- domain character varying(255) NOT NULL default '', -+ domain character varying(255) NOT NULL REFERENCES domain, + $result = db_query_parsed("ALTER TABLE $table_mailbox ALTER COLUMN username DROP DEFAULT"); + $result = db_query_parsed("ALTER TABLE $table_mailbox ALTER COLUMN domain DROP DEFAULT"); -+CREATE INDEX alias_address_active ON alias(address,active); - -TABLE domain_admins -- username character varying(255) NOT NULL default '', -+ username character varying(255) NOT NULL, -- domain character varying(255) NOT NULL default '', -+ domain character varying(255) NOT NULL REFERENCES domain, + $result = db_query_parsed("BEGIN; + ALTER TABLE $table_mailbox RENAME COLUMN domain TO domain_old; + ALTER TABLE $table_mailbox ADD COLUMN domain TYPE varchar(255) REFERENCES domain (domain); + UPDATE $table_mailbox SET domain = domain_old; + ALTER TABLE $table_mailbox DROP COLUMN domain_old; + CREATE INDEX mailbox_username_active ON mailbox(username,active); + COMMIT;"); -TABLE log -- data character varying(255) NOT NULL default '' -+ data text NOT NULL default '' - -TABLE mailbox -- username character varying(255) NOT NULL default '', -+ username character varying(255) NOT NULL, -- domain character varying(255) NOT NULL default '', -+ domain character varying(255) NOT NULL REFERENCES domain, -+CREATE INDEX mailbox_username_active ON mailbox(username,active); - -TABLE vacation -- email character varying(255) NOT NULL default '', -+ email character varying(255) PRIMARY KEY, -- body text NOT NULL, -+ body text NOT NULL DEFAULT '', -- cache text NOT NULL, -+ cache text NOT NULL DEFAULT '', -- domain character varying(255) NOT NULL default '', -+ "domain" character varying(255) NOT NULL REFERENCES "domain", -- active boolean NOT NULL default true, -+ active boolean DEFAULT true NOT NULL -- Constraint "vacation_key" Primary Key ("email") + $result = db_query_parsed("ALTER TABLE $table_vacation ALTER COLUMN body SET DEFAULT = ''"); + $result = db_query_parsed("ALTER TABLE $table_vacation DROP COLUMN cache"); --COMMENT ON TABLE vacation IS 'Postfix Admin - Virtual Vacation'; + $result = db_query_parsed("ALTER TABLE $table_vacation RENAME COLUMN domain to domain_old"); + $result = db_query_parsed("ALTER TABLE $table_vacation ADD COLUMN domain TYPE character varying(255) REFERENCES domain "); + $result = db_query_parsed("UPDATE $table_vacation SET domain = domain_old"); + $result = db_query_parsed("ALTER TABLE $table_vacation DROP COLUMN domain_old"); -+CREATE INDEX vacation_email_active ON vacation(email,active); + $result = db_query_parsed("CREATE INDEX vacation_email_active ON vacation(email,active)"); -+CREATE TABLE vacation_notification ( -+ on_vacation character varying(255) NOT NULL REFERENCES vacation(email) ON DELETE CASCADE, -+ notified character varying(255) NOT NULL, -+ notified_at timestamp with time zone NOT NULL DEFAULT now(), -+ CONSTRAINT vacation_notification_pkey primary key(on_vacation,notified) -+); + $result = db_query_parsed(" +CREATE TABLE vacation_notification ( + on_vacation character varying(255) NOT NULL REFERENCES vacation(email) ON DELETE CASCADE, + notified character varying(255) NOT NULL, + notified_at timestamp with time zone NOT NULL DEFAULT now(), + CONSTRAINT vacation_notification_pkey primary key(on_vacation,notified) +);"); -*/ } function upgrade_79_mysql() { # MySQL only This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |