smeserver-sogo/root/etc/e-smith/events/actions/sogo_upgrade

100 lines
3.7 KiB
Perl
Executable File

#!/usr/bin/perl -w
#----------------------------------------------------------------------
# copyright (C) 2010 Nethesis srl
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#----------------------------------------------------------------------
use strict;
use DBI;
use esmith::ConfigDB;
use esmith::util;
# Exit early if there is nothing to do
die("sogo db must exist") unless ( -d "/var/lib/mysql/sogo/");
die("sogo db must exist") unless ( -f "/var/lib/mysql/sogo/sogo_folder_info.frm");
# This is a translation of the script 'sql-update-1.2.2_to_1.3.0-mysql.sh'
# that is safe to run multiple times, and which can be run on a 1.2.2
# installation without barfing.
my $conf = esmith::ConfigDB->open_ro
or die "Can't open configuration database: $!\n";
our $username = 'sogo';
our $password = $conf->get_prop("sogod", "DbPassword") || '';
our $database = 'sogo';
our $dbi_options = { PrintError => 0, ChopBlanks => 1, AutoCommit => 1 };
my $db_handle = DBI->connect("DBI:mysql:$database",
$username, $password, $dbi_options) ||
die ("Connection error: $DBI::errstr");
my $folders_sth = $db_handle->prepare(qq{
SELECT SUBSTRING_INDEX(c_quick_location, '/', -1)
FROM sogo_folder_info WHERE c_folder_type = 'Appointment';
}) || die ("Unable to prepare query: $DBI::errstr");
$folders_sth->execute() || die ("Unable to execute query: $DBI::errstr");
while (my @folders_row = $folders_sth->fetchrow_array()) {
$db_handle->do(qq{
ALTER TABLE $folders_row[0] ADD COLUMN c_category VARCHAR(255);
});
}
# This is a translation of the script 'sql-update-1.3.3_to_1.3.4-mysql.sh'
# that is safe to run multiple times, and which can be run on a 1.2.2 or 1.3.2
# installation without barfing.
my $contacts_sth = $db_handle->prepare(qq{
SELECT SUBSTRING_INDEX(c_quick_location, '/', -1)
FROM sogo_folder_info where c_folder_type = 'Contact';
}) || die ("Unable to prepare query: $DBI::errstr");
$contacts_sth->execute() || die ("Unable to execute query: $DBI::errstr");
while (my @contacts_row = $contacts_sth->fetchrow_array()) {
$db_handle->do(qq{
ALTER TABLE $contacts_row[0] ADD COLUMN c_categories VARCHAR(255);
});
}
# This is a translation of the script sql-update-1.3.11_to_1.3.12-mysql.sh
# that is safe to run multiple times, and which can be run on a 1.2.2 or 1.3.9
# installation without barfing.
$db_handle->do(qq{
ALTER TABLE sogo_sessions_folder ADD PRIMARY KEY (c_id);
});
# This is a translation of the script sql-update-1.3.16_to_1.3.17-mysql.sh
# This script only works with mysql
# updates c_cycleinfo to mediumtext
#
my $tables_sth = $db_handle->prepare(qq{
SELECT SUBSTRING_INDEX(c_quick_location, '/', -1)
FROM sogo_folder_info where c_path3 = 'Calendar';
}) || die ("Unable to prepare query: $DBI::errstr");
$tables_sth->execute() || die ("Unable to execute query: $DBI::errstr");
while (my @table_row = $tables_sth->fetchrow_array()) {
$db_handle->do(qq{
ALTER TABLE $table_row[0] MODIFY c_cycleinfo mediumtext;
});
}